web-dev-qa-db-ja.com

準備済みステートメントのパラメーターとして配列リストを使用する方法

見てきたが、次の課題に対する答えを見つけることができませんでした。それはかなり簡単に思えますが、私はそれを解決することができませんでした。

タイプArrayList-> ArrayList<Long>LongのレコードIDがあります。このレコードIDのリストを使用して、別のテーブルから行を選択します。ここまでは順調ですね。今、挑戦に...

a)準備されたステートメントを使用して、ArrayListを入力としてテーブルからデータを選択しています。

selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");

上記に関する質問-パラメータはどのように定義する必要がありますか?上記はArrayList型パラメーターに対しては正しくないようです。

b)準備されたステートメントのパラメーターの値を設定するときに問題が発生します。 ArrayList型の値を設定する方法はなく、他に実行可能なオプションはありません。

---> selectPS.set?????(1, arraylistParameter);
     ResultSet rs = selectPS.executeQuery(); 

あなたが私を設定することができる任意の助けや方向は大歓迎です。

ありがとうございました。

30
Thomas Grady

以下のjavadocに記載されているsetArrayメソッドを使用することもできます。

http://docs.Oracle.com/javase/6/docs/api/Java/sql/PreparedStatement.html#setArray(int、Java.sql.Array)

サンプルコード:

PreparedStatement pstmt = 
                conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"});
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
52
Yogendra Singh

ArrayListがある場合は、Array [Object]に変換します

ArrayList<String> list = new ArrayList<String>();
PreparedStatement pstmt = 
            conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", list.toArray());
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
22
Amit Dubey