jdbc preparedStatements为IN内的多个值

时间:2011-09-01 17:03:20

标签: java sql jdbc

如何使用 IN 设置sql的值,该值可以包含变量数字,例如 ... WHERE ...状态IN(4,6,7);

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?); 

4 个答案:

答案 0 :(得分:2)

您可以根据需要传入的状态代码生成SQL IN子句。因此,如果您的状态为IN (4,6,7),那么您可以生成一个以与代码相同数量的问号结束的SQL语句: IN (?,?,?)

答案 1 :(得分:1)

您需要为数组/列表中的每个条目绑定一个值:

SQL:

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

Java:

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

答案 2 :(得分:0)

让我提一下AFAIK只在Postgres中起作用的解决方案。 Postgres有数组,你可以传入一个字符串表示'{1,2,3}'。 IN可以替换为ANY(事实上,在某些情况下,这是PG根据规划器输出在内部处理IN查询的方式。阵列可以通过循环构建完全在客户端,然后作为一个字符串传递,瞧。

答案 3 :(得分:0)