我正在使用Spring的jdbctemplate,我有以下查询:
SELECT ?, count(*) as " + counter + " FROM data GROUP BY ?
当我使用
时List<Map<String, Object>> values = jdbcTemplate.queryForList(sql,columnName, columnName);
我得到一个错误的查询结果 - 我得到一行计数器为11 - 这是数据表中所有行的计数器。很明显,groupBy无法正常工作。 我调试了代码,发现执行的查询实际上是
SELECT 'COLUMN_3', count(*) as COUNTER FROM DATA GROUP BY 'COLUMN_3'
所以我怀疑附加撇号是造成这个错误的原因。
我该如何解决这个问题? (不使用简单的字符串查询 - 我想使用PreparedStatement,所以我不会遇到任何SQL注入问题。)
答案 0 :(得分:2)
在你的情况下用?变量替换?s,如:
String columnName = "COLUMN_3";
String counter = "COUNTER";
SELECT " + columnName + ", count(*) as " + counter + " FROM data GROUP BY " + columnName
然后使用queryForList的简化形式:
List<Map<String, Object>> values = jdbcTemplate.queryForList(sql);