在 spring-jdbc 中使用“where in”

Posted

技术标签:

【中文标题】在 spring-jdbc 中使用“where in”【英文标题】:Using "where in" in spring-jdbc 【发布时间】:2012-01-12 14:56:09 【问题描述】:

有没有办法在SQL中使用“where...in”删除一堆元素,像这样:

HashSet<String> idStrings = ...;
SimpleJdbcTemplate template = getTemplate();
template.update("DELETE FROM records WHERE idstring IN (?)", idStrings);

我试图让一些使用此方法的旧代码工作,但每当我尝试运行它时,Oracle JDBC 驱动程序都会抛出异常:

QL 状态 [99999];错误代码 [17004];无效的列类型;嵌套异常是 java.sql.SQLException: Invalid column type

这是 ojdbc5 11.2.0.1.0 和 spring-jdbc 3.0.3

【问题讨论】:

How to generate a dynamic "in (...)" sql list through Spring JdbcTemplate? 的可能重复项 【参考方案1】:

可以,但是每个 ID 需要一个占位符 (?),并且每个 ID 必须单独绑定。

你也可以使用NamedParameterJdbcTemplate,

[...] 还允许将值列表扩展为适当的数字 占位符。

注意不要在 ID 集中放置太多值。例如,Oracle 将它们限制为 1000 个。

【讨论】:

这对我不起作用。我得到一个 java.sql.SQLException: Invalid column type。有什么想法吗?

以上是关于在 spring-jdbc 中使用“where in”的主要内容,如果未能解决你的问题,请参考以下文章

在mybatis跟spring集成的时候,为啥还要导入spring-jdbc的包呢,这里面不是

Spring-JDBC配置

CDI 中的 Spring-JDBC 等价物是啥?

如何使用 jdbc/spring-jdbc 不使用 PGInterval 对 PostgreSQL 区间数据类型进行操作?

spring-jdbc vs spring-data-jdbc,它们支持啥

Spring-jdbc 5.0.5 NamedParameterJdbcTemplate.batchUpdate ORA-01000