2011-09-01 71 views
4

如何設置sql的值與IN它可以容納可變數字,如...... WHERE ... status IN(4,6,7);jdbc preparedInstancements for multiple value inside IN

PreparedStatement ps = con.prepareStatement(
       "SELECT ea.* FROM employeeAssignment ea " 
      + "JOIN employee e ON e.employeeID = ea.employeeID " 
      + "WHERE e.resourceID = ? and ea.status IN (?);"); 
ps.setInt(1, 75); 
ps.setInt(2, someArray/some thing other?); 
+0

相關:。http://stackoverflow.com/questions/178479/preparedstatement-in-clause-alternatives – Nivas

+0

@nivas感謝它回答我的問題。 –

+0

可能重複[什麼是使用JDBC參數化IN子句的最佳方法?](http://stackoverflow.com/questions/2861230/what-is-the-best-approach-using-jdbc-for-parameterizing-一,在 - 條款) – BalusC

回答

2

您可以生成的SQL IN條款根據你需要通過多少個狀態碼。所以如果你的狀態是IN (4,6,7)那麼你可以生成吃了一個以與代碼相同數量的問號結尾的SQL語句:IN (?,?,?)

+0

如果我沒有錯,您正在討論根據sql中可用的狀態動態添加「?」字符。然後使用循環設置這些值。 :)我也在想它。 –

1

您需要綁定一個值,在數組/列表中的每個條目:

SQL:

ea.status IN (?, ?, ..., ?) 

的Java:

ps.setInt(2, someArray[0]); 
ps.setInt(3, someArray[1]); 
.. 
ps.setInt([...], someArray[someArray.length]); 
0

讓我來提一個AFAIK只能在Postgres中工作的解決方案。 Postgres有數組,你可以傳遞字符串表示'{1,2,3}'。 IN可以被替換爲ANY(事實上,在某些情況下,根據規劃器輸出,PG在內部處理IN查詢的方式。數組可以在客戶端完全建立一個循環,然後作爲字符串傳入。瞧