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

时间:2010-05-11 11:58:33

标签: java spring

我有以下代码:

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的值。怎么做?

需要帮助, 感谢。

2 个答案:

答案 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);