10月7日(木)3、4コマ目
今日、やったこと
Javaでトランザクション実装
今日のホワイトボード
JDBCのデフォルト設定
SQLを実行するたびに、コミット実行。
|
|
| 図 JDBCのデフォルトではSQL実行毎にコミットする |
そのため、複数のSQL実行後、コミットするまたはロールバックすることができない。
Javaでトランザクション実装
①自動コミット機能をオフ
setAutoCommit(false)で自動コミット機能を無効にする。
②コミット実行
トランザクションのSQLがすべて実行したあとでコミット実行。
③ロールバック実行
SQL実行時にエラーが発生すると、例外がスローされる。
よって、
- try{ }ブロックでSQL実行
- catch{ }ブロックでロールバック
でSQL実行に失敗するとロールバックできる。
|
|
| 図 コミット、ロールバックの実装 |
ここまでの実装ではコネクションをクローズしていない
〇古典的な書き方
古典的な書き方ではfinally{ }ブロックでクローズする。
|
|
| 図 finally{}ブロックでDBクローズ |
〇Java7以降(リリース:2011年)
Java7で追加されたtry with resourcesを使うと明示的にクローズしなくてもいい。
|
|
| 図 try with resourcesで自動クローズ |
ロックする
ロック対象行が取得できるSELECT文にFOR UPDATEをつけて実行。
コミット、ロールバックするまでロックされる。
今日作ったソース
いちおう挙げておきます。