Q51:MZ Platformにてデータベースのトランザクション処理を行う方法
A51:
MZ Platformにてデータベースのトランザクション処理を行う方法は次のとおりです。
(1)データベースの自動更新モードを停止する:
[データベースアクセス]のメソッド「setAutoCommit(boolean)」を引数にfalseを設定して実行する。
(2)「SQL文を実行する(String)」等を使用し、SQL文を実行する。
注意:ただ、MySQLでは最初に「set AutoCommit=0」を実行しておく必要があるようです。
(3)操作の結果を反映したい場合には「commit()」を、取り消したい場合には「rollback()」を実行する。
(4)データベースを自動更新モードに戻す:
「setAutoCommit(boolean)」を引数にtrueを設定して実行する。
注意:ただし、MySQLでは最初に「set AutoCommit=1」を実行しておく必要があるようです。
MySQLだけに関して申し上げますと、上記のメソッドを使用しなくてもトランザクション処理が可能なようです。
以下のように順にSQL文を実行します。
例:
set AutoCommit = 0
insert into table (...) values (...)
.
.
.
commit (反映する場合)/ rollback (取り消す場合)
set AutoCommit = 1
データベースのトランザクション処理の補足です。
テーブルを用いてSQLコマンドを一括実行し、エラー発生時にロールバックして操作を取り消すサンプルアプリケーションを作成しました。
ボタン[ID:6]に接続されている処理をご覧ください。
SQL文実行前に、自動更新モードを停止し、エラー時にはrollbackを、正常時にはcommitを実行し、最後に自動更新モードに復帰しています。[MySQLを想定しすべてSQL文で実行しております]
メソッドに添えられた「ErrorOnly」はエラー発生時のみ起動し、「Finally」は通常時およびエラー発生時に必ず行う処理を意味しております。
関連ファイル:トランザクション処理.mzax (※このファイルは、ZIP形式に圧縮してあります。)