![](/img/trans.png)
[英]Is it expensive to hold on to PreparedStatements? (Java & JDBC)
[英]jdbc preparedStatements for multiple value inside IN
如何设置带有IN的 sql的值,它可以包含变量数,如... WHERE ... status 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?);
您可以根据需要传入的状态代码生成SQL IN子句。因此,如果您的状态为IN (4,6,7)
那么您可以生成一个以与代码相同数量的问号结束的SQL语句: IN (?,?,?)
。
您需要为数组/列表中的每个条目绑定一个值:
SQL:
ea.status IN (?, ?, ..., ?)
Java的:
ps.setInt(2, someArray[0]);
ps.setInt(3, someArray[1]);
..
ps.setInt([...], someArray[someArray.length]);
让我提一下AFAIK只在Postgres中工作的解决方案。 Postgres有数组,你可以传入一个字符串表示'{1,2,3}'。 IN
可以替换为ANY
(实际上,在某些情况下,这是PG根据规划器输出IN
内部处理IN
查询的方式。阵列可以完全在客户端使用循环构建,然后作为字符串传入瞧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.