Javaでデータベースを操作する際はLIKE句の書き方に注意!

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文字

コメント