Java Savepointクラスを使って、特定の位置までトランザクションをロールバックする




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

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

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

データベースなので、ロールバックはできないと困ります。
とは言え、すべての手順をロールバックされると困るときは、セーブポイントを使いましょう。
(ログとかおまけテーブルの更新はこけても良いから、本当に更新したい実績データだけでも担保したいときとかw)

Savepointクラスを使って、特定の位置までトランザクションをロールバックするサンプル

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

実行結果

2回目の更新がロールバックされて、1回目の更新までがDUAL表に反映(コミット)されます。
よって、値は「Y」になります。

サンプルの解説

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