QA@IT
«回答へ戻る

回答を投稿

こんにちは。

大分前の話でアレですが、いつもお知恵ばかり拝借しているので
恩返しが出来れば、と思い回答してみることにしました。
( いらない?汗 )

質問の主旨は
PreparedStatement を用いた SQL で in 句を使う場合は?
と理解しています。

回答としては、
in 句で使用する検索文字列分、? ( プリペアードステートメント ) を記述する
となります。

多分、ソースを見ていただいた方が早いので、以下を参照下さい。



public void makeSql( ArrayList id ){

    StringBuffer questions = new StringBuffer();

    for ( int count = 0; count <  id..size(); count++){

        questions.append(",?");
    }

    sql = "select * from user where id in (" + questions.toString().replaceFirst(",","") + ")";

    setPreparedStatement(sql);

    for ( int count = 0; count < id..size(); count++){

        getPreparedStatement().setString(count + 1,  id.get(count).toString());
    }
}

最初の for 分で、検索対象分 ( ここでいうと ArrayList の id 分 )「?」を生成しています。
で、 sql String に他の SQL 分と結合して設定、PreparedStatement にセットしています。
次の for 分で PreparedStatement のパラメータに登録しています。

個人的には where 句の in は ? が一つで、PreparedStatement のパラメータに設定する際に
1,2,3・・・
とカンマ区切りで渡せば OK かと思っていましたので、ちょっとはまってしまいました。

宜しくお願い致します。

[ メッセージ編集済み 編集者: 小僧 編集日時 2007-08-30 11:15 ]

投稿者:小僧

こんにちは。

大分前の話でアレですが、いつもお知恵ばかり拝借しているので
恩返しが出来れば、と思い回答してみることにしました。
( いらない?汗 )

質問の主旨は
PreparedStatement を用いた SQL で in 句を使う場合は?
と理解しています。

回答としては、
in 句で使用する検索文字列分、? ( プリペアードステートメント ) を記述する
となります。

多分、ソースを見ていただいた方が早いので、以下を参照下さい。


~~~


public void makeSql( ArrayList id ){

	StringBuffer questions = new StringBuffer();

	for ( int count = 0; count <  id..size(); count++){

		questions.append(",?");
	}

	sql = "select * from user where id in (" + questions.toString().replaceFirst(",","") + ")";

	setPreparedStatement(sql);

	for ( int count = 0; count < id..size(); count++){

		getPreparedStatement().setString(count + 1,  id.get(count).toString());
	}
}

~~~

最初の for 分で、検索対象分 ( ここでいうと ArrayList の id 分 )「?」を生成しています。
で、 sql String に他の SQL 分と結合して設定、PreparedStatement にセットしています。
次の for 分で PreparedStatement のパラメータに登録しています。

個人的には where 句の in は ? が一つで、PreparedStatement のパラメータに設定する際に
1,2,3・・・
とカンマ区切りで渡せば OK かと思っていましたので、ちょっとはまってしまいました。

宜しくお願い致します。

<font size="-1">[ メッセージ編集済み 編集者: 小僧 編集日時 2007-08-30 11:15 ]</font>


投稿者:小僧