怎么从数据库读取配置信息?

miracleliu 2014-09-15 06:59:59
数据库里有个配置表,key- value;
表结构:
key:varchar(255);
value:varchar(255);

因为value值对应的java中的类型不一样,怎么能方便的读出所有不同类型的配置?

表内容举例,
timeout ,1000
frequence,3.8
cronname,beijing

java类里也有对应的变量,怎么把这些变量对应到库里的配置?


...全文
372 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
miracleliu 2014-10-11
  • 打赏
  • 举报
回复
用反射的实现了下,感觉方便很多; 其中用到Beanutils包
 
public class ConfigInDB {

    public static int testA = 123, testB = 3;
    public static String testC = "";

    public static String print() {

        return "testA:" + testA + ",testB:" + testB + ",testC:" + testC;
    }
}


public static void loadConfigInDB() {
        Class<ConfigInDB> configInDB = ConfigInDB.class;
        // Field field = config.getField(pair.key);
        Map<String, String> configs = new JavaDemoConfigDAO().queryAll();
        log.debug(ConfigInDB.print());
        if (configs != null && configs.size() > 0) {
            for (Map.Entry<String, String> conf : configs.entrySet()) {
                String key = conf.getKey();
                String value = conf.getValue();
                try {
                    Field field = configInDB.getField(key);
                    // Method m = configInDB.getMethod("set" + changeFirst(field.getName()),
                    // field.getType());
                    // m.invoke(configInDB, ConvertUtils.convert(value, field.getType()));

                    field.set(configInDB, ConvertUtils.convert(value, field.getType()));
                } catch (SecurityException e) {
                    log.error("error", e);
                } catch (NoSuchFieldException e) {
                    log.error("error,no such param, please delete from DB", e);
                } catch (IllegalArgumentException e) {
                    log.error("error", e);
                    // } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                    // } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
        }
        log.debug(ConfigInDB.print());

    }
cjd96 2014-09-18
  • 打赏
  • 举报
回复
先全部当作string读取,然后用trycatch尝试转型为int,try里面赋值给int类型,catch里面的赋值给string类型
码上行动_Light 2014-09-16
  • 打赏
  • 举报
回复

while(rs.next()){
    timeout = Integer.parseInt(rs.getString("timeout"));
    frequency = Float.valueOf(rs.getString("frequency "));
    cronname = rs.getString("cronname");   
    ……
}
我习惯这么写,因为实际运用中key对应的value类型已经是确定的了,这里完全可以这样直接转化。
姜小白- 2014-09-15
  • 打赏
  • 举报
回复
if (cl1.equals("timeout")) { timeout = Integer.parseInt(cl2); } else if (cl1.equals("frequency")) { frequency = Float.valueOf(cl2); } 上面笔误,写错了,应该是第二列的值
姜小白- 2014-09-15
  • 打赏
  • 举报
回复
while(rs.next()){
    String cl1 = rs.getString(1);
    String cl2 = rs.getString(2);
    if (cl1.equals("timeout")) {
        timeout = Integer.parseInt(cl1);
    } else if (cl1.equals("frequency")) {
        frequency = Float.valueOf("cl1");
    }
   。。。
}
就这个思路,根据第一列的列值,判断第二列的数据类型,然后拿到自己想要的数据信息
miracleliu 2014-09-15
  • 打赏
  • 举报
回复
都没看明白啊。。。 数据库里是这样: KEY | VALUE timeout |1000 frequence | 3.8 cronname | beijing 然后读取数据库‘
int timeout;
float frequency;
String cronname;
while(rs.next()){
//问题来了,获取的KEY也是个字符串,怎么对应到上面几个变量?
    rs.getString("KEY");//这个是什么???
    rs.getString("VALUE");
}

反射?
hjn1128 2014-09-15
  • 打赏
  • 举报
回复
不是会自动转换的吗
rumlee 2014-09-15
  • 打赏
  • 举报
回复
全部按照String的方式读取。 需要其他的类型,再转换就是了。
姜小白- 2014-09-15
  • 打赏
  • 举报
回复
ResultSet 中,getString(columnIndex) 可以通读所有列数据 可以通过getString 来获取key 和 对应value ,然后再转为需要的类型
miracleliu 2014-09-15
  • 打赏
  • 举报
回复
数据库里是这样: timeout ,1000 frequence,3.8 cronname,beijing java里有 int timeout; float frequence; String cronname; 怎么在java里把这些数据读进来?
姜小白- 2014-09-15
  • 打赏
  • 举报
回复
value值对应的java中的类型不一样? 这个怎么理解?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧