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

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

需要帮助, 谢谢。

最佳答案

看起来您正在混合命名参数和位置参数。最好使用其中之一,但不能同时使用。

尝试

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/

相关文章:

java - Spring自定义auth过滤器和自定义jwtfilter

java - 降低代码的循环复杂度

java - 在jsp上创建List时出现异常

Java、Spring、Tomcat 在 "INFO: Initializing Spring root WebApplicationContext"挂起,我想我更改了整个系统的允许内存堆

java - 我如何在 Jersey 中使用自定义验证

java - 使用 @ContextConfiguration 运行 spring 集成测试时,应用程序上下文为 null

java - JDBC 连接到 Oracle Clustered

java - Java中单变量非线性函数的最小查找

Spring Batch - 提交间隔的后期绑定(bind)不适用于跳过策略

java - 如何在 Spring JMS 连接工厂中配置 weblogic 重新连接策略