String keyword = "富";
PreparedStatement st = con.prepareStatement("SELECT name FROM tbl_names WHERE name LIKE ?");
st.setString(1, "%" + keyword);
これにより、富、という文字で始まる名前が検索できる。つまり、LIKE 演算子に使う % や _ などのワイルドカードも含めた検索文字列を
setString
メソッドで、? にセットするということだ。ではワイルドカードをエスケープするときは、どうするか?Oracle ではエスケープ文字は特に決まっておらず、ESCAPE オプションで指定する。たとえば、
SELECT id FROM tbl_names WHERE id LIKE '\%%' escape '\';
という SQL 文は、\ をエスケープ文字に指定しており、% という文字で始まる id を検索している。もし、\ がなかったなら、すべての id がヒットする。
JDBC の場合も同様にすればよい。
PreparedStatement st = con.prepareStatement("SELECT id FROM tbl_names WHERE id LIKE ? escape '\\' ");
st.setString(1, "\\%%");
こうすれば、% で始まる id を検索できる。念のため言っておくと、\\ のように二重になっているのは、Java の文字列中では \ はエスケープ文字であるため、二重にすることで \ そのものを表現している。
ただ、このエスケープ文字の指定は Oracle 固有であるので、違う RDBMS では通用しないかもしれない。そこで、JDBC はエスケープ構文が用意している。次のように書く。
PreparedStatement st = con.prepareStatement("SELECT id FROM tbl_names WHERE id LIKE ? escape {'\\'} ");
st.setString(1, "\\%%");
結局、Oracle との違いは、エスケープ文字を {} で囲っていることだけだ。
Oracle、PostgreSQL 等でこれを実験してみる。
そして
http://www.nilab.info/zurazure2/000740.html
このページも参考にしながら、続きを書く。
No comments:
Post a Comment