如何在jdbctemplate中使用groupBy进行查询

时间:2014-09-14 13:36:50

标签: java postgresql spring-jdbc jdbctemplate

我正在使用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注入问题。)

1 个答案:

答案 0 :(得分:2)

你使用sql吗?占位符仅在Sql PreparedStatements的WHERE子句中 WHERE bossesname =?

在你的情况下用?变量替换?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);