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

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();

親トピック: java.sql.Savepoint インターフェイス
関連概念
セーブポイントの開放
セーブポイントの決まり
関連資料
セーブポイントの制限事項