我有以下代码:
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的值。怎么做?
需要帮助, 感谢。
答案 0 :(得分:9)
看起来你正在混合命名和位置参数。最好使用其中一种,但不能同时使用两者。
尝试
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)
。修改后的调用是查询(String sql,SqlParameterSource params,RowMapper mapper) - SqlParamtersSource作为第二个参数是键。另外,值得检查您使用的是NamedParameterJdbcTemplate。
答案 1 :(得分:4)
只需使用“provnum”的命名参数:
String sql = "SELECT * FROM INCOME WHERE PROVNUM=:provnum AND FISCALDATE IN (:ids )"
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", year);
parameters.addValue("provnum", ...);
return template.getJdbcOperations().query(sql, rowMapper, parameters);