在spring中的namedParameterJdbcTemplate中动态选择列名

时间:2016-06-24 09:35:47

标签: java spring spring-jdbc

嗨问题很简单

我们都知道这个查询有效

String query = SELECT * FROM DATABASE_LOCKER WHERE LAST_HOUR = :last_hour

        MapSqlParameterSource parameters = new MapSqlParameterSource();
        parameters.addValue("last_hour","2");


getNamedParameterJdbcTemplate().update(
                    QueryConstants.query, parameters);

但这有可能吗?那就是我需要动态地给出表的列名

String query = SELECT * FROM DATABASE_LOCKER WHERE :last_hour = 1

    MapSqlParameterSource parameters = new MapSqlParameterSource();
    parameters.addValue("last_hour","LAST_HOUR");


getNamedParameterJdbcTemplate().update(
                QueryConstants.query, parameters);

2 个答案:

答案 0 :(得分:3)

为什么不使用它,如下所示:

if(yourCondition){
columnName = "ABCD";
}else{
columnName = "A1B2C3";
}

在代码中,您可以动态使用列名称:

   public/ private Object / void someDaoMethod(String columnName, String value){
    String query = "SELECT * FROM DATABASE_LOCKER WHERE "+columnName+"="+value";
    .....

    }

答案 1 :(得分:0)

如果您使用的是属性文件,我可以建议您这样...

queryToGetFromDabaseLocker = SELECT * FROM DATABASE_LOCKER WHERE {0} = {1}

在Code中,你可以简单地使用:

读取属性文件值,如下所示:

Properties properties = new Properties();
try {
  properties.load(new FileInputStream("path/filename"));
} catch (IOException e) {
  ...
}

迭代为:

String query = "";
String formatteQuery = "";
    for(String key : properties.stringPropertyNames()) {
       if(key.equals("queryToGetFromDabaseLocker")){
      query = properties.getProperty(key);
      formatteQuery = MessageFormat.format(query , "YourColumnName", "YourValue");
       }
    }