嗨问题很简单
我们都知道这个查询有效
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);
答案 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");
}
}