如何在spring中用IN子句执行查询?

我有以下代码:

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) 。 修改后的调用是查询(String sql,SqlParameterSource params,RowMapper mapper) – SqlParamtersSource作为第二个参数是键。 另外,值得检查您使用的是NamedParameterJdbcTemplate 。

只需为“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);