JDBC:在set条件下:我可以将一个set作为单个param传递吗? [英] JDBC: in set condition: can I pass a set as single param?
问题描述
在JDBC中,我可以对查询参数使用问号,如下所示:
In JDBC I can use question marks for query parameters, like this:
"SELECT * FROM users WHERE login = ?"
然后
ps.setString(1, "vasya");
但我如何查询登录列表:
But how can I query for list of logins:
"SELECT * FROM users WHERE login IN ?"
假设,我有
List<String> logins = ...
我应该在那里输入什么:
What should I type there:
ps.setWhat(1, what);
我可以将查询重写为:
"SELECT * FROM users WHERE login = ? OR login = ? OR login = ?"
然后在循环中调用setString,但我想知道是否可以通过一组元素作为查询中的单个参数。
and then call setString in loop, but I'd like to know if it is possible to pass a set of elements as single param in query.
也许有特定于供应商的扩展?
Maybe there are vendor-specific extensions?
推荐答案
有供应商特定的方法,因此了解您使用的数据库会很好。我知道PostgreSQL和H2的解决方案。我在H2数据库中实现了这个功能,所以这就是我最了解的:
There are vendor specific ways to do that, therefore it would be good to know what database you use. I know solutions for PostgreSQL and H2. I implemented this feature in the H2 database, so that's what I know best:
H2数据库
PreparedStatement prep = conn.prepareStatement(
"select * from users where login in (select * from table(x int = ?))");
prep.setObject(1, new Object[] { "1", "2" });
ResultSet rs = prep.executeQuery();
PostgreSQL
WHERE login = ANY(?)
然后设置使用PreparedStatement.setArray(..)的值数组的参数(不是H2的setObject)。
Then set the parameter to an array of values using PreparedStatement.setArray(..) (not setObject as for H2).
这篇关于JDBC:在set条件下:我可以将一个set作为单个param传递吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!