MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

JavaとMySQLでLIKE検索を使う際、検索変数の引用符を正しく記述する方法

JavaからMySQLに接続し、LIKE句で検索変数(キーワード)を使ったあいまい検索を行う場合、SQL文中の文字列を正しくシングルクォート(')で囲むことが重要です。まず、検索変数を使ったLIKE句の正しい構文を見てみましょう。

String sqlQuery;
sqlQuery = "select * from yourTableName where yourColumnName like '%" + yourSearchVariableName + "%'";

それでは、実際にサンプルテーブルを作成して動作を確認していきます。

サンプルテーブルの作成

まず、テーブルを作成します。

mysql> create table demo19
-> (
-> id int not null auto_increment primary key,
-> name varchar(50)
-> );
Query OK, 0 rows affected (3.48 sec)

レコードの挿入

INSERTコマンドを使って、テーブルにいくつかのレコードを挿入します。

mysql> insert into demo19(name) values('John Smith');
Query OK, 1 row affected (0.15 sec)

mysql> insert into demo19(name) values('David Miller');
Query OK, 1 row affected (0.15 sec)

mysql> insert into demo19(name) values('Adam Smith');
Query OK, 1 row affected (0.12 sec)

mysql> insert into demo19(name) values('Chris Brown');
Query OK, 1 row affected (0.13 sec)

レコードの確認

SELECT文でテーブルの内容を表示してみましょう。

mysql> select * from demo19;

実行すると、次のような結果が得られます。

+----+--------------+
| id | name         |
+----+--------------+
|  1 | John Smith   |
|  2 | David Miller |
|  3 | Adam Smith   |
|  4 | Chris Brown  |
+----+--------------+
4 rows in set (0.00 sec)

Javaコードの例

続いて、LIKE句で検索変数を使用する際に引用符を正しく扱うJavaのコード例を紹介します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class RemoveJavaQueryError {
    public static void main(String[] args) {
        Connection con = null;
        Statement statement = null;
        try {
            String searchKeyWord = "Smith";
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sampledatabase", "root", "123456");
            statement = (Statement) con.createStatement();
            String sqlQuery;
            sqlQuery = "select * from demo19 where name like '%" + searchKeyWord + "%'";
            ResultSet rs = statement.executeQuery(sqlQuery);
            while (rs.next()) {
                System.out.println(rs.getString("name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

このプログラムを実行すると、次のような出力が得られます。

John Smith
Adam Smith

「Smith」というキーワードを含む名前だけが正しく抽出されていることがわかります。ポイントは、SQL文の中でワイルドカード(%)を含む検索条件全体をシングルクォートで囲んでいる点です。

より安全な方法:PreparedStatementの活用

文字列連結でSQLを組み立てる方法はシンプルですが、SQLインジェクションのリスクがあります。実務では、PreparedStatementを使ってプレースホルダ(?)にパラメータをバインドする方法が推奨されます。

String sqlQuery = "select * from demo19 where name like ?";
PreparedStatement ps = con.prepareStatement(sqlQuery);
ps.setString(1, "%" + searchKeyWord + "%");
ResultSet rs = ps.executeQuery();

この方法であれば、引用符や特殊文字のエスケープ処理が自動的に行われるため、安全かつ確実にあいまい検索を実装できます。

  1. JavaでMySQLデータベースのデータを削除する方法|DELETE文の使い方を徹底解説

    MySQLデータベースからデータを削除するには、DELETEコマンドを使用します。まずは基本となる構文を確認しておきましょう。 DELETE文の基本構文 delete from テーブル名 where 条件; WHERE句で条件を指定すると、該当するレコードだけをピンポイントで削除できます。逆に条件を指定しなかった場合、テーブル内の全データが削除されてしまうため、実行前には必ず条件を確認してください。 本記事では、JavaプログラムからMySQLデータベースのデータを削除する具体的な手順を解説します。はじめにサンプル用のテーブルを作成し、テストデータを挿入していきましょう。 サンプルテーブルの

  2. JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法

    executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手