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

これを試す方法はありません。他の方法についてはこちらをご覧ください。ただし、例外が1つあります。ただし、Oracleデータベースを使用している場合は、これを試すことができます。

于 2012-06-04T11:04:01.850 に答える
0

データベースエンジンがIN(サブクエリ)をサポートしている場合は、それを行うためのビューまたはメモリテーブルを作成できます。

于 2012-06-09T13:17:26.490 に答える
0

回避策は、実行時にクエリ文字列全体を作成し、PreparedStatement の代わりに Statement オブジェクトを使用することだと思います。

于 2012-06-04T09:37:28.850 に答える