Java では、リレーショナル データベースとの対話は最も一般的なタスクの 1 つです。JDBC (Java Database Connectivity) は、Java プラットフォームの標準 API であり、さまざまなリレーショナル データベースに接続して操作するために使用されます。中でも、PreparedStatement
JDBC の重要なインターフェイスであり、プリコンパイルされた SQL ステートメントを実行するために使用されます。このブログでは、JDBC の基本概念、使用法、ベスト プラクティスを含めて、JDBC について詳しく紹介しますPreparedStatement
。
PreparedStatement とは何ですか?
PreparedStatement
これは、プリコンパイルされた SQL ステートメントを実行するために使用される JDBC のインターフェイスです。通常の SQL ステートメントとは異なりStatement
、PreparedStatement
SQL ステートメントは実行前にコンパイルされるため、より効率的かつ安全であり、SQL インジェクション攻撃を防ぐことができます。PreparedStatement
通常、複数の同様の SQL クエリまたは更新を実行するために使用され、一度コンパイルして複数回実行するだけで済みます。
プリペアドステートメントの作成
オブジェクトを作成するには、まずオブジェクトを取得し、次にメソッドを使用して SQL ステートメントに渡すPreparedStatement
必要があります。以下に例を示します。Connection
prepareStatement
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class PreparedStatementDemo {
public static void main(String[] args) {
// 获取数据库连接
Connection connection = getConnection();
try {
// SQL 查询语句,使用 ? 作为占位符
String sql = "SELECT * FROM users WHERE username = ?";
// 创建 PreparedStatement 对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
// 获取数据库连接的示例方法
private static Connection getConnection() {
// 实现获取数据库连接的逻辑,这里省略具体代码
return null;
}
}
上の例では、PreparedStatement
SQL クエリ ステートメントの?
プレースホルダーとして使用されるオブジェクトを作成しました。後でsetXXX
このメソッドを使用して、これらのプレースホルダーに特定の値を設定できます。
パラメータの設定
PreparedStatement
SQL ステートメントのプレースホルダーのパラメーター値を設定できます。、など、setXXX
さまざまなデータ型のパラメータ設定には多くの方法があります。パラメータ設定の例を次に示します。setInt
setString
setDouble
try {
String sql = "INSERT INTO users (username, age) VALUES (?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 设置第一个参数为字符串类型
preparedStatement.setString(1, "Alice");
// 设置第二个参数为整数类型
preparedStatement.setInt(2, 30);
// 执行 SQL 语句
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
上記の例では、setString
およびsetInt
メソッドを使用して、SQL ステートメント内の 2 つのプレースホルダーに特定のパラメーター値を設定しました。
クエリの実行
executeQuery
クエリ操作を実行するには、クエリ結果を保存するためのオブジェクトを返す メソッドを使用できますResultSet
。以下に例を示します。
try {
String sql = "SELECT * FROM users WHERE age > ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 设置参数
preparedStatement.setInt(1, 25);
// 执行查询
ResultSet resultSet = preparedStatement.executeQuery();
// 处理查询结果
while (resultSet.next()) {
String username = resultSet.getString("username");
int age = resultSet.getInt("age");
System.out.println("Username: " + username + ", Age: " + age);
}
} catch (SQLException e) {
e.printStackTrace();
}
上記の例では、プレースホルダーを使用してクエリ操作を実行し、setInt
メソッドを通じてプレースホルダーのパラメーター値を設定し、次にexecuteQuery
メソッドを使用してクエリを実行し、最後にResultSet
クエリ結果を取得するためにトラバースしました。
アップデートを実行する
executeUpdate
更新操作 (挿入、更新、削除など) を実行するには、メソッドを使用できます。以下に例を示します。
try {
String sql = "UPDATE users SET age = ? WHERE username = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 设置参数
preparedStatement.setInt(1, 28);
preparedStatement.setString(2, "Alice");
// 执行更新
int rowCount = preparedStatement.executeUpdate();
// 输出更新的行数
System.out.println("Updated " + rowCount + " rows.");
} catch (SQLException e) {
e.printStackTrace();
}
上記の例では、プレースホルダーを使用して更新操作を実行し、setInt
andメソッドを使用setString
してプレースホルダーのパラメーター値を設定し、その後executeUpdate
、 メソッドを使用して更新操作を実行し、更新された行の数を出力します。
バッチ処理を実行する
PreparedStatement
バッチ処理もサポートされており、複数の SQL ステートメントを一度に実行できます。これは、同様の SQL ステートメントを頻繁に実行する必要がある場合に役立ち、パフォーマンスを向上させることができます。バッチ処理の例を次に示します。
try {
String insertSql = "INSERT INTO users (username, age) VALUES (?, ?)";
String updateSql = "UPDATE users SET age = ? WHERE username = ?";
// 创建 PreparedStatement 对象
PreparedStatement insertStatement = connection.prepareStatement(insertSql);
PreparedStatement updateStatement = connection.prepareStatement(updateSql);
// 设置参数并添加到批处理中
for (int i = 1; i <= 3; i++) {
insertStatement.setString(1, "User" + i);
insertStatement.setInt(2, 25 + i);
insertStatement.addBatch();
updateStatement.setInt(1, 30 + i);
updateStatement.setString(2, "User" + i);
updateStatement.addBatch();
}
// 执行批处理
int[] insertResult = insertStatement.executeBatch();
int[] updateResult = updateStatement.executeBatch();
// 输出批处理结果
System.out.println("Inserted rows: " + Arrays.toString(insertResult));
System.out.println("Updated rows: " + Arrays.toString(updateResult));
} catch (SQLException e) {
e.printStackTrace();
}
上記の例では、2 つのPreparedStatement
オブジェクトを作成し、addBatch
メソッドを使用して複数の SQL ステートメントをバッチに追加し、次にexecuteBatch
メソッドを使用してバッチ内のすべての SQL ステートメントを一度に実行しました。
PreparedStatement を閉じる
使用後はPreparedStatement
すぐに閉じてリソースを解放する必要があります。メソッドを使用してclose
閉じることができますPreparedStatement
。終了の例は次のとおりですPreparedStatement
。
try {
// 创建 PreparedStatement 对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 设置参数...
// 执行操作...
// 关闭 PreparedStatement
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
要約する
PreparedStatement
これは、プリコンパイルされた SQL ステートメントを実行するための JDBC の重要なインターフェイスであり、効率、セキュリティ、保守性の利点があります。実際のアプリケーションでは、これを使用するとPreparedStatement
SQL インジェクション攻撃を効果的に防止し、データベース操作のパフォーマンスを向上させることができます。この記事の導入により、 のPreparedStatement
基本概念と使用法をより明確に理解できるようになります。データベース関連の Java アプリケーションを作成する場合は、PreparedStatement
SQL 操作を実行するために を使用することを検討してください。
著者情報 著者:Fanyi CSDN: https: //techfanyi.blog.csdn.net Nuggets:https://juejin.cn/user/4154386571867191 |