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();
この方法であれば、引用符や特殊文字のエスケープ処理が自動的に行われるため、安全かつ確実にあいまい検索を実装できます。
-
JavaでMySQLデータベースのデータを削除する方法|DELETE文の使い方を徹底解説
MySQLデータベースからデータを削除するには、DELETEコマンドを使用します。まずは基本となる構文を確認しておきましょう。 DELETE文の基本構文 delete from テーブル名 where 条件; WHERE句で条件を指定すると、該当するレコードだけをピンポイントで削除できます。逆に条件を指定しなかった場合、テーブル内の全データが削除されてしまうため、実行前には必ず条件を確認してください。 本記事では、JavaプログラムからMySQLデータベースのデータを削除する具体的な手順を解説します。はじめにサンプル用のテーブルを作成し、テストデータを挿入していきましょう。 サンプルテーブルの
-
JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法
executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手