[Java Advanced] JDBC ステートメント: SQL ステートメントを実行するための重要なインターフェイス

ここに画像の説明を挿入します

Java アプリケーションでは、データベースとの対話が一般的なタスクです。データベース操作を実行するには、JDBC (Java Database Connectivity) を使用してデータベースとの接続を確立し、SQL ステートメントを実行する必要があります。Statementこのインターフェイスは JDBC の重要なインターフェイスであり、SQL ステートメントを実行し、データベースと対話するために使用されます。この記事では、オブジェクトの作成方法、SQL ステートメントの実行方法、結果の処理方法など、Statementインターフェイスの使用方法を詳しく紹介します。Statement

JDBC ステートメントとは何ですか?

Statementこのインターフェイスは JDBC の一部であり、SQL クエリと更新ステートメントをデータベースに送信し、データベースから結果を取得することができます。Statementインターフェイスには複数のサブインターフェイスと実装クラスがあり、一般的に使用されるものには次のものがあります。

  • Statement: パラメーターなしで通常の SQL ステートメントを実行するために使用されます。

  • PreparedStatement: プリコンパイルされた SQL ステートメントを実行するために使用されます。これには、SQL インジェクション攻撃を防ぐパラメーターを含めることができます。

  • CallableStatement: データベースストアドプロシージャを実行するために使用されます。

この記事では、主にインターフェイスとその使用法に焦点を当てますStatement

JDBC ステートメント オブジェクトの作成

SQL ステートメントを実行する前に、Statementまずオブジェクトを作成する必要があります。Statementオブジェクトは通常、オブジェクトに関連付けられており、オブジェクトのメソッドConnectionを通じて作成されますオブジェクトを作成するサンプルコードは次のとおりです。ConnectioncreateStatement()Statement

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

public class StatementExample {
    
    
    public static void main(String[] args) {
    
    
        // JDBC连接参数
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        // 创建Connection对象
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
    
    
            // 创建Statement对象
            Statement statement = connection.createStatement();
            
            // 在此处执行SQL语句
            
            // 关闭Statement
            statement.close();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }
}

上記のコードでは、最初にオブジェクトを作成しConnection、次にメソッドを使用してオブジェクトcreateStatement()を作成しますStatement手動で閉じずにブロックを終了するときにこれらのリソースが自動的に閉じられるように、ブロック内にとオブジェクトをtry-with-resources作成したことに注意してください。ConnectionStatement

SQLクエリ文の実行

オブジェクトが作成されたらStatement、それを使用して SQL クエリを実行できます。SELECT以下に、クエリを実行してクエリ結果を処理する方法を示す簡単な例を示します。

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

public class SelectExample {
    
    
    public static void main(String[] args) {
    
    
        // JDBC连接参数
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
    
    
            // 创建Statement对象
            Statement statement = connection.createStatement();
            
            // 执行SQL查询语句
            String sql = "SELECT * FROM employees";
            ResultSet resultSet = statement.executeQuery(sql);
            
            // 处理查询结果
            while (resultSet.next()) {
    
    
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                double salary = resultSet.getDouble("salary");
                System.out.println("ID: " + id + ", Name: " + name + ", Salary: " + salary);
            }
            
            // 关闭ResultSet和Statement
            resultSet.close();
            statement.close();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }
}

上記のコードでは、メソッドを使用してクエリ ステートメントexecuteQuery()を実行し、オブジェクトを使用してクエリ結果を反復処理します。最後に、とオブジェクトを閉じて、リソースを解放します。SELECTResultSetResultSetStatement

SQL更新文の実行

クエリに加えて、オブジェクトを使用して、などStatementの SQL 更新ステートメントを実行することもできます以下は、ステートメントを実行して新しいデータを挿入する方法の例です。INSERTUPDATEDELETEINSERT

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

public class InsertExample {
    
    
    public static void main(String[] args) {
    
    
        // JDBC连接参数
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
    
    
            // 创建Statement对象
            Statement statement = connection.createStatement();
            
            // 执行SQL更新语句
            String sql = "INSERT INTO employees (name, salary) VALUES ('John', 50000)";
            int rowsAffected = statement.executeUpdate(sql);
            
            if (rowsAffected > 0) {
    
    
                System.out.println("Insertion successful. Rows affected: " + rowsAffected);
            } else {
    
    
                System.out.println("Insertion failed.");
            }
            
            // 关闭Statement
            statement.close();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }
}

上記のコードでは、executeUpdate()メソッドを使用してステートメントを実行しINSERT、影響を受ける行の数をチェックして、挿入が成功したかどうかを判断します。

SQLインジェクション攻撃を防ぐ

StatementSQL ステートメントを実行するときは、SQL インジェクション攻撃を防ぐように注意してください。SQL インジェクション攻撃は、悪意を持って作成された入力によってデータベースの操作を中断する可能性がある一般的なサイバーセキュリティの脅威です。SQL インジェクション攻撃を防ぐには、パラメータを含む SQL ステートメントを、PreparedStatement代わりにを使用して実行する必要があります。以下に示すように、パラメーターを SQL ステートメントにバインドできるため、ユーザー入力の直接連結が回避されます。StatementPreparedStatement

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class PreparedStatementExample {
    
    
    public static void main(String[] args) {
    
    
        // JDBC连接参数
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
    
    
            // 创建PreparedStatement对象
            String sql = "INSERT INTO employees (name, salary) VALUES (?, ?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            
            // 设置参数
            preparedStatement.setString(1, "Alice");
            preparedStatement.setDouble(2, 60000);
            
            // 执行SQL更新语句
            int rowsAffected = preparedStatement.executeUpdate();
            
            if (rowsAffected > 0) {
    
    
                System.out.println("Insertion successful. Rows affected: " + rowsAffected);
            } else {
    
    
                System.out.println("Insertion failed.");
            }
            
            // 关闭PreparedStatement
            preparedStatement.close();
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
    }
}

上記のコードでは、 を使用してステートメントPreparedStatementを実行し、 andメソッドを使用してパラメータ値を設定します。これにより、ユーザー入力が SQL コードとして誤って解釈されることがなくなり、セキュリティが向上します。INSERTsetString()setDouble()

要約する

Statementこのインターフェイスは、SQL ステートメントを実行するための JDBC の重要なインターフェイスの 1 つです。オブジェクトを作成することでStatement、クエリや更新などのさまざまなデータベース操作を実行できます。ただし、セキュリティを強化するため、SQL ステートメントを実行するときPreparedStatement、特にユーザー入力が関係する場合には、これをお勧めします。Statementこの記事が、JDBC のインターフェイスと、それを使用してデータベースと対話する方法についての理解を深めるのに役立つことを願っています。

著者情報

著者:Fanyi
CSDN: https: //techfanyi.blog.csdn.net
Nuggets:https://juejin.cn/user/4154386571867191

おすすめ

転載: blog.csdn.net/qq_21484461/article/details/133467613