トランザクション
Autocommit
デフォルトでは、JDBC 接続は自動コミットモードで開始します。個々のSQL ステートメントは、 ステートメントの完了時にコミットされる独自のトランザクション内で実行されます。
明示的なトランザクションは、接続の setAutoCommit メソッドを使って自動コミットを無効にすることで使用できます。このモードでは、 SQL ステートメントが暗黙のうちにトランザクションを開始し、トランザクションがコミットまたはロールバックされるまで実行されます。 コミットまたはロールバックの後、別のトランザクションが自動的に作成されます。
一度にアクティブにできるトランザクションは1つのみです。トランザクションは、
どのStatement オブジェクトから実行されるかに関わらず、接続で実行されるすべてのステートメントに適用されます。
Connection conn; Statement stmt = conn.createStatement(); // This creates a new transaction for the next group of SQL statements. conn.setAutoCommit(false); // Both of these statements execute in the same transaction stmt.execute("INSERT INTO ExampleTable (ExampleCol) VALUES ('ExampleVal1')"); stmt.execute("INSERT INTO ExampleTable (ExampleCol) VALUES ('ExampleVal2')"); // This ends the current transaction and begins a new one for the next group of statements conn.commit();
トランザクションのコミットとロールバック
自動コミットを無効にすると、
アクティブなトランザクションは、接続のcommit メソッドを使用してコミットすることができます。コミットはトランザクション内のすべての変更を受け入れ、
その変更が一貫している場合受け入れを永続化します。
conn.commit();アクティブなトランザクションは、接続のrollback メソッドを使用してロールバックすることができます。ロールバックするとトランザクションで実行されたすべての変更が取り消されます。
conn.rollback();