JDBC学習におけるPreparedStatementの使い方

PreparedStatementは、Javaで事前に準備されたSQLステートメントを実行するためのインターフェースであり、Statementインターフェースを継承しています。Statementと比較して、PreparedStatementには次の利点があります。1. SQLインジェクション攻撃の防止:PreparedStatementは、SQLステートメント中のパラメーターを置換するためにプレースホルダー(?)を使用することで、文字列の連結によるSQLインジェクション問題を回避できます。2. パフォーマンスの向上:PreparedStatementは、SQLステートメントを事前に準備することができ、データベースが実行プランをキャッシュするため、実行効率が向上します。3. 可読性の向上:PreparedStatementを使用することで、SQLステートメントとパラメーターを分離することができ、コードがより明確になります。PreparedStatementを使用する手順は以下の通りです。1. PreparedStatementオブジェクトを作成する:ConnectionオブジェクトのprepareStatement()メソッドを使用して、PreparedStatementオブジェクトを作成します。

PreparedStatement pstmt = connection.prepareStatement(sql);

2. パラメータの値を設定する:PreparedStatementオブジェクトのsetXXX()メソッドを使用して、SQL文のパラメータ値を設定します。ここでXXXはパラメータの型を表します。たとえば、setString()やsetInt()などです。

pstmt.setString(1, "John");

SQL文を実行する際は、PreparedStatementオブジェクトのexecuteUpdate()メソッドを使用して、影響を受けた行の数を返します。

int rows = pstmt.executeUpdate();

4. リソースをクローズする:PreparedStatementオブジェクトとデータベース接続をクローズします。

pstmt.close();

connection.close();


完璧なサンプルコードは以下の通りです:

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) {

Connection connection = null;

PreparedStatement pstmt = null;

 

try {

// 连接数据库

connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/

mydatabase”, “root”, “password”);

 

// 创建PreparedStatement对象

String sql = “INSERT INTO users(name, age) VALUES(?, ?)”;

pstmt = connection.prepareStatement(sql);

 

// 设置参数值

pstmt.setString(1, “John”);

pstmt.setInt(2, 25);

 

// 执行SQL语句

int rows = pstmt.executeUpdate();

System.out.println(“受影响的行数:” + rows);

} catch (SQLException e) {

e.printStackTrace();

} finally {

// 关闭资源

try {

if (pstmt != null) {

pstmt.close();

}

if (connection != null) {

connection.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}


上記のコードでは、PreparedStatementを使用して挿入操作を実行する方法が示されており、プレースホルダー(?)がSQLステートメントのパラメーターを代替するために使用されています。実際の使用では、必要に応じてPreparedStatementを使用してクエリ、更新、削除などを実行することができます。

bannerAds