Java セーブポイントを利用して、特定の位置までトランザクションをロールバックする




更新の途中でこけたら嫌だな。
こけても、ここまでは更新しときたいんだよな。

そんなあなた。
セーブポイントなら、自分の好きなところに戻せます。

セーブポイントであ~る。

データベースなので、ロールバックはできないと困ります。
でも、すべての手順をロールバックされると困るときは、セーブポイントを使いましょう。

セーブポイントを利用して、特定の位置までトランザクションをロールバックするサンプル

DUAL表のデータを2回更新したあと、1回目の更新後の状態に戻してコミットをします。
DUAL表を更新してはいけません。良い子のみんなは真似しないでねw

実行結果

1回目の状態までがデータベースに反映されます。
よって、値は「Y」のままになります。

サンプルの解説

セーブポイントの使い方は、簡単です。
戻したいポイントで、Connection#setSavepoint()をして、セーブしておきます。
今回はセーブポイントに名前をつけてみましたが、使わないので特に意味はないですw
ちなみに、名前を付けるのであれば、Oracleの場合、オブジェクト系なんでもそうですが、30byte以内でセーブポイントの名前を付けます。
あとは、Connection#rollback(SavePoint)で、戻したいセーブポイントを指定すれば、そこまでロールバックしてくれます。