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

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()で値をバインドするとよいでしょう。

  1. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;

  2. MySQLのUPDATE文の中でSELECTステートメントを使う方法

    MySQLでUPDATEコマンドを実行する際に、同じテーブルを参照するSELECTステートメントを組み合わせたいケースはよくあります。しかし、UPDATE文の中で直接サブクエリとして対象テーブルを指定するとエラーになるため、工夫が必要です。解決策:サブクエリとWHERE句を組み合わせるこの問題を回避するには、WHERE句とともにサブクエリを使用し、さらにそのサブクエリを別のSELECT文でラップ(派生テーブル化)します。これにより、MySQLは一時的なテーブルとして扱うため、更新中のテーブルへの参照エラーを防ぐことができます。実際の手順を順番に見ていきましょう。1. テーブルを作成するまず、サ