10月6日(木)3、4コマ目
今日、 やったこと
- Javaでトランザクション実装(コミット、ロールバック)
- Javaでトランザクション実装(手動ロック)
今日のホワイトボード
JDBCで更新
JDBCは更新系SQLを実行するたびにコミットされるのがデフォルト。
|
| 図 JDBCのデフォルトはSQL実行ごとにコミット実行 |
複数のSQLで1トランザクションを構成する場合は、この自動コミット機能をオフにする必要がある。
また、コミット、ロールバックもしかるべき箇所で実行するように実装しなければならない。
|
| 図 自動コミットオフ、コミット・ロールバック実装 |
古典期なDBアクセス手法で実装
複数の商品データをすべて更新できればコミット、1つでも更新失敗すればロールバックする。
実装例
try-with-resourcesを使って実装
try-with-resourcesを使えば、コネクションの解放(DB接続切断)はtryブロック終了時に自動的にやってくれる。
|
| 図 try-with-resources |
DBによっては、 DB切断時に非コミットデータは自動的にロールバックする。よって、明示的にロールバックしなくてもいい。
しかし、オラクルは DB切断時に非コミットデータは自動的にコミットする ので注意。
|
| 図 非コミットデータの扱い |
実装例
手動でロックする
更新系SQLを実行する際、DBは更新対象行をロックする。
ただ、場合によっては複数行をまとめてロックしたいとか、ロックして値を確認後更新したいケースもある。このようなときは手動でロックする。
手動でロックするにはロック対象行を検索するSELECT文に for update をつけて実行。
実装例
練習問題
複数のテキストボックス入力内容をどのテキストボックスかを識別して取得したい。
各テキストボックスのname属性には ID_price を命名
|
| 図 金額入力用テキストボックスのname属性の命名ルール |
入力値、入力テキストボックスを取得
①まず、取得したname属性から xx_price を探す
Stringクラスのmatches()メソッドを使う。
②name属性がxx_priceなら入力値を取得
③name属性値xx_priceからxxの部分(ID)だけ取り出す
Stringクラスのsplit()メソッドを使う。
|
| 図 パラメータ名(name属性値)からIDを取得 |
次回は
練習問題作成時間にします。






コメント
コメントを投稿