2012-01-12 255 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