JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法
executeQuery()メソッドの基本的な使い方
JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。
yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);
yourResultSetObject = yourPreparedStatementObject.executeQuery();
それでは、実際にサンプルデータベース「sample」を使って手順を見ていきましょう。
ステップ1:テーブルを作成する
まず、データベース「sample」内にテーブルを作成します。テーブル作成用のクエリは次のようになります。
mysql> create table JavaPreparedStatement
-> (
-> Id int,
-> Name varchar(10),
-> Age int
-> );
Query OK, 0 rows affected (0.89 sec)
ステップ2:テーブルにレコードを挿入する
続いて、INSERTコマンドを使ってテーブルにいくつかのレコードを追加します。
mysql> insert into JavaPreparedStatement values(1,'Larry',23);
Query OK, 1 row affected (0.16 sec)
mysql> insert into JavaPreparedStatement values(2,'Sam',25);
Query OK, 1 row affected (0.21 sec)
mysql> insert into JavaPreparedStatement values(3,'Mike',26);
Query OK, 1 row affected (0.12 sec)
ステップ3:JavaのPreparedStatementですべてのレコードを取得する
準備が整ったら、JavaのPreparedStatementを使ってテーブル内の全レコードを取得・表示できます。SELECT文の実行にはexecuteQuery()メソッドを使用します。
以下がJavaコードの完全な例です。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class PreparedStatementSelectQueryDemo {
public static void main(String[] args) {
String JdbcURL = "jdbc:mysql://localhost:3306/sample?useSSL=false";
String Username = "root";
String password = "123456";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rst = null;
String myQuery = "select Id,Name,Age from JavaPreparedStatement";
try {
con = DriverManager.getConnection(JdbcURL, Username, password);
pstmt = con.prepareStatement(myQuery);
rst = pstmt.executeQuery();
System.out.println("Id\t\tName\t\tAge\n");
while(rst.next()) {
System.out.print(rst.getInt(1));
System.out.print("\t\t"+rst.getString(2));
System.out.print("\t\t"+rst.getInt(3));
System.out.println();
}
} catch(Exception exec) {
exec.printStackTrace();
}
}
}
コードのポイント解説
- DriverManager.getConnection():JDBC URL・ユーザー名・パスワードを指定して、データベースへの接続を確立します。
- prepareStatement():SQLクエリを事前にコンパイルしたPreparedStatementオブジェクトを生成します。プレースホルダ(?)と組み合わせればSQLインジェクション対策にもなり、パフォーマンス向上も期待できます。
- executeQuery():SELECT文を実行し、検索結果をResultSetオブジェクトとして返します。
- rst.next():結果セットをカーソルで1行ずつ順番に処理していきます。
実行結果
上記のプログラムを実行すると、コンソールにはテーブル内の全レコードが以下のように出力されます。
Id Name Age
1 Larry 23
2 Sam 25
3 Mike 26
このように、PreparedStatementとexecuteQuery()を組み合わせることで、安全かつ効率的にMySQLからデータを取得できます。条件を指定した検索を行いたい場合は、「WHERE Id = ?」のようにプレースホルダを使い、setInt()やsetString()で値をバインドするとよいでしょう。
-
MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法
MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;
-
MySQLのUPDATE文の中でSELECTステートメントを使う方法
MySQLでUPDATEコマンドを実行する際に、同じテーブルを参照するSELECTステートメントを組み合わせたいケースはよくあります。しかし、UPDATE文の中で直接サブクエリとして対象テーブルを指定するとエラーになるため、工夫が必要です。解決策:サブクエリとWHERE句を組み合わせるこの問題を回避するには、WHERE句とともにサブクエリを使用し、さらにそのサブクエリを別のSELECT文でラップ(派生テーブル化)します。これにより、MySQLは一時的なテーブルとして扱うため、更新中のテーブルへの参照エラーを防ぐことができます。実際の手順を順番に見ていきましょう。1. テーブルを作成するまず、サ