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

Gur*_*lki 4 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;
}
Run Code Online (Sandbox Code Playgroud)

但我无法发送PROVNUM的值.怎么做?

需要帮助,谢谢.

mdm*_*dma 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);
Run Code Online (Sandbox Code Playgroud)

在你的评论之后,我看到你正在使用该query()方法的错误重载:有很多可供选择,所以一些错误可以进入就不足为奇了!

你需要打电话

return this.template.getJdbcOperations().query(
       "SELECT  ... etc.", parameters, this.rowMapper);
Run Code Online (Sandbox Code Playgroud)

在原始调用中,您正在调用query(String sql, RowMapper mapper, Object... params)需要文字参数的版本.修改后的调用是查询(String sql,SqlParameterSource params,RowMapper mapper) - SqlParamtersSource作为第二个参数是键.另外,值得检查您使用的是NamedParameterJdbcTemplate.


mat*_*t b 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);
Run Code Online (Sandbox Code Playgroud)