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
を通じて作成されます。オブジェクトを作成するサンプルコードは次のとおりです。Connection
createStatement()
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
作成したことに注意してください。Connection
Statement
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()
を実行し、オブジェクトを使用してクエリ結果を反復処理します。最後に、とオブジェクトを閉じて、リソースを解放します。SELECT
ResultSet
ResultSet
Statement
SQL更新文の実行
クエリに加えて、オブジェクトを使用して、やなどStatement
の SQL 更新ステートメントを実行することもできます。以下は、ステートメントを実行して新しいデータを挿入する方法の例です。INSERT
UPDATE
DELETE
INSERT
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インジェクション攻撃を防ぐ
Statement
SQL ステートメントを実行するときは、SQL インジェクション攻撃を防ぐように注意してください。SQL インジェクション攻撃は、悪意を持って作成された入力によってデータベースの操作を中断する可能性がある一般的なサイバーセキュリティの脅威です。SQL インジェクション攻撃を防ぐには、パラメータを含む SQL ステートメントを、PreparedStatement
代わりにを使用して実行する必要があります。以下に示すように、パラメーターを SQL ステートメントにバインドできるため、ユーザー入力の直接連結が回避されます。Statement
PreparedStatement
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 コードとして誤って解釈されることがなくなり、セキュリティが向上します。INSERT
setString()
setDouble()
要約する
Statement
このインターフェイスは、SQL ステートメントを実行するための JDBC の重要なインターフェイスの 1 つです。オブジェクトを作成することでStatement
、クエリや更新などのさまざまなデータベース操作を実行できます。ただし、セキュリティを強化するため、SQL ステートメントを実行するときPreparedStatement
、特にユーザー入力が関係する場合には、これをお勧めします。Statement
この記事が、JDBC のインターフェイスと、それを使用してデータベースと対話する方法についての理解を深めるのに役立つことを願っています。
著者情報 著者:Fanyi CSDN: https: //techfanyi.blog.csdn.net Nuggets:https://juejin.cn/user/4154386571867191 |