JavaではJDBC(Java DataBase Connectivity)というAPIを利用することで、Javaの中でSQL文を記述してデータベースを操作することができます。
基本的には通常のSQL文を記述すれば動作するのですが、LIKE演算子などSQL文内に文字列を記述する場合は注意が必要です。
SQL内の文字列は全て代入値側で記述しよう
通常LIKE演算子を使ったSQL文は検索したいパターン文字列を使って次のように記述されます。
-- 従業員テーブル内で"10月"を含むようなレコードを取得したい
SELECT * FROM 従業員
WHERE 備考 LIKE '%10月%'
JDBC内でSQL文を記述する場合に注意すべきことはSQL文を文字列で表現する必要があるということです。
例えば上のSQL文をJava内で記述しようとすると次のように表すことができます。
String sql = "SELECT * FROM 従業員 WHERE 備考 LIKE '%?%'";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, 変数);
しかしこの文を実行するとエラーになってしまいます。なぜなら?に入るのは変数に格納されている文字列なので、クオーテーションが混在してSQL文を正しく1つの文字列として表現できていないためです。
そこでLIKE句を使う際、%などのパターン文字は下のように代入値側に記述しましょう。
String sql = "SELECT * FROM 従業員 WHERE 備考 LIKE ?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, "%" + 変数 + "%");
ちなみにパターン文字としてよく使われるのは次の2つなのでこれらを使用する際はこのことを思い出してくださいね。
パターン文字 | 内容 |
---|---|
% | 任意の0文字以上 |
_ | 任意の1文字 |
コメント