ホーム   »  スポンサー広告  »     »  データベース/JDBC  »  PreparedStatementのLIKE条件

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PreparedStatementのLIKE条件

JDBC の PreparedStatement LIKE 条件にワイルドカード付きでプレースホルダ (?) を設定する場合:

stmt = con.prepareStatement(
    "SELECT FOO FROM BAR WHERE NAME LIKE ?");
stmt.setString(1, "A%");

または SQL 内で % と連結させて:

stmt = con.prepareStatement(
    "SELECT FOO FROM BAR WHERE NAME LIKE ? || '%'");
stmt.setString(1, "A");

下の記述のほうがパラメータ設定時に LIKE を意識しなくても良さそうに見えるわけだが、後述するようにこれも結局は LIKE を意識しなければならない。どちらか良いかは単に好みの問題だろう。

シングルクォートで囲まれたプレースホルダは静的な文字列と見なされるため、以下のように記述するのは間違い。

stmt = con.prepareStatement(
    "SELECT FOO FROM BAR WHERE NAME LIKE '?%'");
stmt.setString(1, "A");

LIKE 条件に埋め込む値はワイルドカードがそのまま通ってしまうので、設定前にエスケープが必要。JDBC ではワイルドカードと見なしたくない % と _ の前に \ を置いてやれば良い。以下の例は 「100% Pure Java」で始まるレコードを検索する。

stmt = con.prepareStatement(
    "SELECT FOO FROM BAR WHERE NAME LIKE ? || '%'");
stmt.setString(1, "100\\% Pure Java");

コメント
トラックバック
トラックバック URL
コメントの投稿
管理者にだけ表示を許可する
Profile
Takami Torao
Takami Torao
C/C++ 使いだった 1996年、運命の Java と出会い現在に至る。のらアーキテクト。
Yah, this is image so I don't wanna eat spam, sorry!
Search

Google
MOYO Laboratory
Web

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。