QA@IT
«回答へ戻る

回答を投稿

ご指摘ありがとうございます。

プレースホルダは、SQL文中に文字列埋め込みをする、C言語の"%s"みたいなものだと思っていたのですが、プリコンパイル済みのSQLにSQL表現のvarcharなりfloatなりをセットするものらしく、プレースホルダに対して"1,2"のような形で埋め込むのは無理そう、というのがわかってきました。

プレースホルダを使わないとか。

ごもっともです。
ただ、そうするとソース中でSQLを組み立てることになりますよね。
できれば、SQLはpropertiesファイルに書くなどして外出しにして、
ソースではpropertiesを読んでデータを「埋め込むだけ」にしたいのです。
もっとも、"1,2,..."という文字列はソース中でループで組み立てることになるので、
変なこだわりなのかもしれませんが、、

 IN句の中身がそれほど数が多くないなら、

下記のような感じでよいのではないでしょうか?

あいにく、一覧で(かなり大量に)出した選択肢から、いくつでも複数選択可、
という処理で選択されたリストがここに入ってくるので、"?"の数を事前に決めることはできないのです。

結局、プレースホルダの代わりに、Cのsprintf()のjava版みたいなのを使おうかと思っています。
(ここで見つけました: http://java.sun.com/developer/technicalArticles/Programming/sprintf/))

プレースホルダの代わりに"%s"を置いて、そこに"1,2,...."という文字列を埋め込むという寸法です。
ただこれだと、SQLのワイルドカード"%"を"%%"としてエスケープしてやらねばならず、
あまりスマートな方法ではないようにも思うのですが。。

以上、お礼&報告でした。

投稿者:gotaro

ご指摘ありがとうございます。

プレースホルダは、SQL文中に文字列埋め込みをする、C言語の"%s"みたいなものだと思っていたのですが、プリコンパイル済みのSQLにSQL表現のvarcharなりfloatなりをセットするものらしく、プレースホルダに対して"1,2"のような形で埋め込むのは無理そう、というのがわかってきました。


> プレースホルダを使わないとか。

> 


ごもっともです。
ただ、そうするとソース中でSQLを組み立てることになりますよね。
できれば、SQLはpropertiesファイルに書くなどして外出しにして、
ソースではpropertiesを読んでデータを「埋め込むだけ」にしたいのです。
もっとも、"1,2,..."という文字列はソース中でループで組み立てることになるので、
変なこだわりなのかもしれませんが、、


>  IN句の中身がそれほど数が多くないなら、

> 下記のような感じでよいのではないでしょうか?

> 


あいにく、一覧で(かなり大量に)出した選択肢から、いくつでも複数選択可、
という処理で選択されたリストがここに入ってくるので、"?"の数を事前に決めることはできないのです。

結局、プレースホルダの代わりに、Cのsprintf()のjava版みたいなのを使おうかと思っています。
(ここで見つけました: [http://java.sun.com/developer/technicalArticles/Programming/sprintf/)](http://java.sun.com/developer/technicalArticles/Programming/sprintf/))

プレースホルダの代わりに"%s"を置いて、そこに"1,2,...."という文字列を埋め込むという寸法です。
ただこれだと、SQLのワイルドカード"%"を"%%"としてエスケープしてやらねばならず、
あまりスマートな方法ではないようにも思うのですが。。

以上、お礼&報告でした。


投稿者:gotaro