我有以下代码:
try {
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", year);
return this.template.getJdbcOperations().query(
"SELECT * FROM INCOME WHERE PROVNUM=? AND FISCALDATE IN ( :ids )", this.rowMapper, parameters);
} catch (EmptyResultDataAccessException ex) {
return null;
}
但我无法发送 PROVNUM 的值。怎么做?
需要帮助, 谢谢。
最佳答案
看起来您正在混合命名参数和位置参数。最好使用其中之一,但不能同时使用。
尝试
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", year);
parameters.addValue("provnum", provnum);
return this.template.getJdbcOperations().query(
"SELECT * FROM INCOME WHERE PROVNUM=:provnum AND FISCALDATE IN ( :ids )", this.rowMapper, parameters);
在您发表评论后,我发现您使用了错误的 query()
方法重载:有相当多的方法可供选择,因此出现一些错误也就不足为奇了!
你需要打电话
return this.template.getJdbcOperations().query(
"SELECT ... etc.", parameters, this.rowMapper);
在您的原始调用中,您正在调用需要文字参数的版本 query(String sql, RowMapper mapper, Object... params)
。修改后的调用是 query(String sql, SqlParameterSource params, RowMapper mapper) - 作为第二个参数的 SqlParamtersSource 是关键。此外,值得检查一下您是否正在使用 NamedParameterJdbcTemplate .
关于java - 如何在 spring 中使用 IN 子句执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810418/