2011-09-01 76 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查询的方式。数组可以在客户端完全建立一个循环,然后作为字符串传入。瞧