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

JDBCのStatement(ステートメント)とは?作成・実行方法を解説


Statementインターフェースは静的なSQL文を表すもので、Javaプログラムから汎用的なSQL文を作成・実行するために使用されます。データベースへクエリを送信する際の基本となるインターフェースであり、JDBCプログラミングの中核を担う要素の一つです。

ステートメントの作成方法

Statementオブジェクトは、ConnectionインターフェースのcreateStatement()メソッドを使って作成できます。以下のように、このメソッドを呼び出してステートメントを生成します。

Statement stmt = null;
try {
    stmt = conn.createStatement();
    . . .
}
catch (SQLException e) {
    . . .
}
finally {
    . . .
}

なお、使用後のStatementオブジェクトはclose()メソッドで明示的にクローズするのが望ましいでしょう。リソースリークを防ぎ、安定したアプリケーション動作につながります。

Statementオブジェクトの実行

Statementオブジェクトを作成したら、execute()executeUpdate()executeQuery()のいずれかの実行メソッドを使ってSQL文を実行できます。

  • execute(): SQL DDL文(CREATE TABLEやDROP TABLEなど)を実行するためのメソッドです。戻り値はboolean型で、ResultSetオブジェクトが取得できるかどうかを示します。

  • executeUpdate(): INSERT、UPDATE、DELETEなどのデータ操作文を実行するためのメソッドです。戻り値はint型で、影響を受けた行数が返されます。

  • executeQuery(): 表形式のデータを返す文(SELECT文など)を実行するためのメソッドです。戻り値はResultSetオブジェクトで、検索結果を順に読み取ることができます。

サンプルコード

次のJDBCアプリケーションは、ステートメントの作成と実行の手順を示しています。テーブルの作成、データの挿入、検索という一連の流れを確認してみましょう。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class StatementExample {
    public static void main(String args[]) throws SQLException {
        // ドライバの登録
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());

        // 接続の取得
        String mysqlUrl = "jdbc:mysql://localhost/testdb";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
        System.out.println("Connection established......");

        // ステートメントの作成
        Statement stmt = con.createStatement();

        // テーブル作成(DDL文)の実行
        String createTable = "CREATE TABLE Employee("
            + "Name VARCHAR(255), "
            + "Salary INT NOT NULL, "
            + "Location VARCHAR(255))";
        boolean bool = stmt.execute(createTable);

        // データ挿入(DML文)の実行
        String insertData = "INSERT INTO Employee("
            + "Name, Salary, Location) VALUES "
            + "('Amit', 30000, 'Hyderabad'), "
            + "('Kalyan', 40000, 'Vishakhapatnam'), "
            + "('Renuka', 50000, 'Delhi'), "
            + "('Archana', 15000, 'Mumbai')";
        int i = stmt.executeUpdate(insertData);
        System.out.println("Rows inserted: "+i);

        // 検索(SELECT文)の実行
        ResultSet rs = stmt.executeQuery("Select *from Employee");

        while(rs.next()) {
            System.out.print("Name: "+rs.getString("Name")+", ");
            System.out.print("Salary: "+rs.getInt("Salary")+", ");
            System.out.print("City: "+rs.getString("Location"));
            System.out.println();
        }
    }
}

実行結果

Connection established......
Rows inserted: 4
Name: Amit, Salary: 30000, City: Hyderabad
Name: Kalyan, Salary: 40000, City: Vishakhapatnam
Name: Renuka, Salary: 50000, City: Delhi
Name: Archana, Salary: 15000, City: Mumbai

このように、Statementインターフェースを使えばDDL・DML・SELECT文をすべて同じオブジェクトから実行できます。ただし、ユーザー入力を含むSQLを扱う場合はPreparedStatementを使用することで、SQLインジェクション対策やパフォーマンス向上が期待できるため、状況に応じて使い分けることが重要です。

  1. MySQL JDBCドライバーの接続文字列とは?書き方と使い方を解説

    MySQL JDBCドライバーの接続文字列とはJavaからMySQLデータベースへ接続する際に必要となるのが「JDBC接続文字列」です。まず、MySQLのJDBCドライバーを読み込むためのコードは以下のようになります。Class.forName(com.mysql.jdbc.Driver);ここで指定している Driver はインターフェースであり、このクラスをロードすることでMySQL用のJDBCドライバーが利用可能になります。なお、新しいMySQL Connector/J(バージョン8.0以降)では、ドライバークラス名が com.mysql.cj.jdbc.Driver に変更されている点

  2. C#のfinallyステートメントとは?例外処理における役割と使い方を解説

    C#におけるfinallyブロックは、例外がスローされたかどうかにかかわらず、指定した一連のステートメントを必ず実行するために使用します。たとえば、ファイルを開いた場合、処理中に例外が発生してもしなくても、最終的にはファイルを閉じる必要があります。このようなリソースの解放や後始末(クリーンアップ処理)に、finallyブロックが活用されます。エラー処理は、try・catch・finallyという3つのキーワードを組み合わせて実装します。tryブロックには例外が発生する可能性のあるコードを記述し、catchブロックで例外を捕捉して適切に処理し、finallyブロックには例外の有無に関係なく確実に