JDBC:在set条件下:我可以将一个set作为单个param传递吗? [英] JDBC: in set condition: can I pass a set as single param?

查看:155
本文介绍了JDBC:在set条件下:我可以将一个set作为单个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆