設定したセーブポイントへのロールバック

JDBC 3.0のAPIには、Connection.setSavepointメソッドが新たに用意されています。このメソッドは現在のトランザクションにセーブポイントを設定します。 Connection.rollbackメソッドはセーブポイントを引数に取れるよう、オーバーロードされています。より詳細な情報はjava.sql.Connectionインターフェイス: JDBC3.0にて利用可能なメソッドを参照してください。

以下に例示するコードでは、表に行を挿入してsvpt1というセーブポイントを設定し、さらに二つ目の行を挿入します。トランザクションがsvpt1へロールバックされると、二つ目の挿入は取り消されますが最初の挿入は損なわれません。別の表現をすれば、トランザクションをコミットすると、'1'のを持つ行だけがTABLE1に追加されます。
conn.setAutoCommit(false); // セーブポイントを使うためには自動コミットを切らなければなりません。
Statement stmt = conn.createStatement();
int rows = stmt.executeUpdate("INSERT INTO TABLE1 (COL1) VALUES(1)");
// セーブポイントの設定
set savepoint
Savepoint svpt1 = conn.setSavepoint("S1");
rows = stmt.executeUpdate("INSERT INTO TABLE1 (COL1) VALUES (2)");
...
conn.rollback(svpt1);
...
conn.commit();
関連概念
セーブポイントの開放
セーブポイントの決まり
関連資料
セーブポイントの制限事項