2012-01-12 222 views
1

“其中”使用有没有办法使用“凡......在” SQL中,像这样删除了一堆元素:春季-JDBC

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

我试图让一些老代码工作使用这种方法,但每当我尝试运行它时,Oracle JDBC驱动程序抛出一个异常:

QL state [99999];错误代码[17004];无效的列类型;嵌套的异常是java.sql.SQLException中:无效的列式

这是ojdbc5 11.2.0.1.0和弹簧JDBC 3.0.3

+1

可能的重复[如何通过Spring JdbcTemplate生成一个动态的“(...)”sql列表?](http://stackoverflow.com/questions/1981683/how-to-generate-a-dynamic- in-sql-list-through-spring-jdbctemplate) – axtavt 2012-01-12 15:00:56

回答

1

这是可能的,但你需要一个占位符(?)每ID,并且每个ID必须分开绑定。

你也可以使用NamedParameterJdbcTemplate,这

[...]也可以扩大值的列表,以占位符的适当数量 。

小心不要在ID集中放置太多的值。例如,Oracle将它们限制为1000。

+1

这不适合我。我有一个java.sql.SQLException:无效的列类型。有任何想法吗? – Trevor 2013-08-22 16:21:52