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を取得

次回は
練習問題作成時間にします。





コメント

このブログの人気の投稿

11月14日(月)1、2コマ目

10月27日(木)3、4コマ目

10月4日(火)1、2コマ目