将数组传递给SELECT * FROM表WHERE国家IN(?...)

时间:2012-06-04 09:15:43

标签: java jdbc

有没有办法为“WHERE country IN(...)”查询传递字符串数组?

类似的东西:

String[] countries = {"France", "Switzerland"};
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM table WHERE country IN (?...)");
pstmt.setStringArray(1, countries);
pstmt.executeQuery();

一个丑陋的解决方法是根据数组的大小创建查询

String[] countries = {"France", "Switzerland"};
if (countries.size() == 0) { return null; }
String query = "SELECT * FROM table WHERE country IN (?";
for (int i = 1; i < countries.size; i++) { query += ", ?"; }
PreparedStatement pstmt = con.prepareStatement(query);
for (int i = 0; i < countries.size; i++) { pstmt.setString(1+i, countries[i]); }
pstmt.executeQuery();

但这看起来很难看。

任何想法?

4 个答案:

答案 0 :(得分:4)

不,这是不可能的。像Hibernate这样的ORM或像Spring JDBC这样的包装API允许这样做。但是使用普通的JDBC,你必须自己做。

答案 1 :(得分:0)

我认为解决方法是在运行时使用Statement对象而不是PreparedStatement来制定整个查询字符串。

答案 2 :(得分:0)

无法尝试此操作。请参阅here其他方法。但是有一个例外,如果您使用oracle数据库,那么您可以尝试this

答案 3 :(得分:0)

如果数据库引擎支持IN(子查询),则可以创建视图或内存表来执行此操作。