電子書籍の厳選無料作品が豊富!

動的SQLのバインド変数に対して、PreparedStatement.setXXXXX()メソッドで値が設定できますが、これと同様に、IN演算子の()内をバインド変数化し、その都度内容を設定してやる事は可能でしょうか。

例えば、

SELECT *
FROM tbl_a
WHERE cd IN (?)

のようなSQLをプリコンパイルしたオブジェクトに対して、()内が(1','2','3')や('1','2')などのように動的に項目数、内容値が変更できるような設定方法をご存知の方がおられましたら、是非ご教示下さい。

A 回答 (1件)

元のSQL文を動的に作成してから値をセットすればいいんじゃないですか?



例)
int[] vals = {1,2,3,4,5};

String sql = "SELECT * FROM tbl_a WHERE cd IN(" + createParamStr(vals.length) + ")";
PreparedStatement pstmt = connection.prepareStatement(sql);
for(int i = 0; i < vals.length; i++){
pstmt.setInt(i + 1, vals[i]);
}

------
String createParamStr(int num){
if(num < 1){
return "";
}

StringBuffer sb = new StringBuffer("?");
for(int i = 1; i < num; i++){
sb.append(",?");
}
return sb.toString();
}

※あくまで例なので試してません。

この回答への補足

ご回答ありがとうございます。

ご教示頂いた方法だと、IN演算子に与える要素の数が変わる度にSQLのプリコンパイルが必要です。
今回お尋ねしたかったのは、質問にもございますように、一度プリコンパイルしたSQLについて、動的にIN演算子に与える要素の数や内容を変えたいというものです。

補足日時:2006/01/28 10:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!