• 締切済み

IN演算子の中身を動的に生成

動的SQLのバインド変数に対して、PreparedStatement.setXXXXX()メソッドで値が設定できますが、これと同様に、IN演算子の()内をバインド変数化し、その都度内容を設定してやる事は可能でしょうか。 例えば、 SELECT * FROM tbl_a WHERE cd IN (?) のようなSQLをプリコンパイルしたオブジェクトに対して、()内が(1','2','3')や('1','2')などのように動的に項目数、内容値が変更できるような設定方法をご存知の方がおられましたら、是非ご教示下さい。

みんなの回答

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.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(); } ※あくまで例なので試してません。

asdfldfnjsvfs
質問者

補足

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

すると、全ての回答が全文表示されます。

関連するQ&A