トランザクションは、データベースに対する複数の更新を一つの処理として扱う単位です。もし複数の更新処理のうち、一つでも失敗したら更新前の状態に戻し、すべての更新処理が成功したら確定することができます。
Javaプログラムからデータベースを操作するときに、既定の設定では自動的確定するようになっているので、トランザクション処理をする場合はその機能をオフにする必要があります。その後、データベースに対する処理を行ない、成功したらコミット(確定)、失敗したらロールバック(取り消し)の指定をします。
トランザクション処理を行うにはConnectionクラスとCommandクラスを使います。トランザクション処理は次の手順で行います。
1. データベースに接続する
2. ConnectionオブジェクトのsetAutoCommitメソッドで自動コミット機能をオフにする
3. SQLコマンドを実行する
4. 確定(Commit)するか、取り消し(Rollback)をする
5. データベースを切断する
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクト名 | TransactionTest |
---|
○ 作成の準備
StatementTestプロジェクトをコピーして作成してください。
○ プログラム
mainメソッドを次のように記述してください。
○ 実行結果
登録するユーザー情報を入力してください。
ID:5
ユーザー名:itou
パスワード:ipass
氏名:伊藤
変更のあった件数:1
1)確定 2)取消し(デフォルト):2
取り消しました。
登録するユーザー情報を入力してください。
ID:5
ユーザー名:itou
パスワード:ipass
氏名:伊藤
変更のあった件数:1
1)確定 2)取消し(デフォルト):1
確定しました。
○ 解説
30行目で自動コミット機能をオフにしています。これにより、SQL文を実行するとトランザクションモードで実行され、すぐには確定されなくなります。
60行目から、確定するか、取り消すかの処理が行われます。もし確定する場合は63行目にあるように、Connectionオブジェクトのcommitメソッドを呼び出して確定します。これによりデータベース上の変更が確定され、データベースに反映されます。取り消す場合は67行目にあるようにConnectionオブジェクトのrollbackメソッドを呼び出して取り消します。これによりデータベース上の変更が破棄され、SQL文実行前の状態に戻ります。確定か、取り消しかを指定した後、73行目にあるようにデータベースを閉じます。