使用“where in”在 spring-jdbc 中
有没有办法在 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:无效的列类型
这是 ojdbc5 11.2.0.1.0 和 spring-jdbc 3.0.3
Is there a way to delete a bunch of elements using "where... in" in SQL, like so:
HashSet<String> idStrings = ...;
SimpleJdbcTemplate template = getTemplate();
template.update("DELETE FROM records WHERE idstring IN (?)", idStrings);
I am trying to get some old code to work that uses this method, but whenever I try to run it the Oracle JDBC drivers throw an exception:
QL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
This is with ojdbc5 11.2.0.1.0 and spring-jdbc 3.0.3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是可能的,但每个 ID 需要一个占位符 (
?
),并且每个 ID 必须单独绑定。您还可以使用 NamedParameterJdbcTemplate,其中
请注意不要在 ID 集中放置太多值。例如,Oracle 将它们限制为 1000。
It's possible, but you need one placeholder (
?
) per ID, and each ID must be bound separately.You could also use NamedParameterJdbcTemplate, which
Be careful not to put too many values in the set of IDs. Oracle limits them to 1000, for example.