在 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的包呢,这里面不是
如何使用 jdbc/spring-jdbc 不使用 PGInterval 对 PostgreSQL 区间数据类型进行操作?
spring-jdbc vs spring-data-jdbc,它们支持啥
Spring-jdbc 5.0.5 NamedParameterJdbcTemplate.batchUpdate ORA-01000