2

有没有办法为“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

4 回答 4

4

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

于 2012-06-04T09:17:59.760 回答
0

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

于 2012-06-04T09:37:28.850 回答
0

没办法尝试这个。看这里到其他方式。但是有一个例外,如果你使用oracle数据库那么你可以试试这个

于 2012-06-04T11:04:01.850 回答
0

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

于 2012-06-09T13:17:26.490 回答