jdbcでどのようにトランザクションを実現するか
JDBCは、以下の手順でトランザクションを実現します。
1. Connectionオブジェクトの作成:DriverManager.getConnection()メソッドを使用して、データベースとの接続を表すConnectionオブジェクトを作成します。
2. オートコミットの無効化:ConnectionオブジェクトのsetAutoCommit(false)メソッドを呼び出して、オートコミットを無効化します。
3. SQL文の実行:Connectionオブジェクトを使用してStatementまたはPreparedStatementオブジェクトを作成し、SQL文を実行します。
4. トランザクションのコミット:すべてのSQL文が正常に実行された場合、Connectionオブジェクトのcommit()メソッドを呼び出してトランザクションをコミットします。
5. トランザクションのロールバック:SQL文の実行に失敗した場合、Connectionオブジェクトのrollback()メソッドを呼び出してトランザクションをロールバックできます。
6. 接続のクローズ:トランザクションが成功したかどうかに関係なく、リソースを解放するためにConnectionオブジェクトを閉じる必要があります。
以下に、簡単なサンプルコードを示します。
“`java
import java.sql.*;
public class TransactionExample {
public static void main(String[] args) {
Connection conn = null;
try {
// Connectionオブジェクトの作成
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”, “username”, “password”);
// オートコミットの無効化
conn.setAutoCommit(false);
// SQL文の実行
Statement stmt = conn.createStatement();
stmt.executeUpdate(“INSERT INTO table1 VALUES (1, ‘value1’)”);
stmt.executeUpdate(“INSERT INTO table2 VALUES (2, ‘value2’)”);
// トランザクションのコミット
conn.commit();
System.out.println(“トランザクションは正常に実行されました!”);
} catch (SQLException e) {
// トランザクションのロールバック
if (conn != null) {
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
// 接続のクローズ
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
“`
この例では、まずConnectionオブジェクトを作成し、次にオートコミットを無効にします。その後、2つのINSERT文を実行し、2つの文がどちらも正常に実行された場合にトランザクションをコミットします。そうでない場合はトランザクションをロールバックし、例外情報を表示します。最後に、Connectionオブジェクトを閉じます。