トランザクション
トランザクションとは、一連の処理を一つのまとまった処理として扱うための論理的な単位です。同一トランザクションに属するSQL処理が複数ある場合
- すべてが成功して初めて処理結果を確定する(コミット)
- 途中で失敗したら、トランザクション実行前の状態に戻す(ロールバック)
データベースの処理結果を確定させることをコミット(commit)、実行前の状態に戻すことをロールバック(rollback)といいます。
saint laurent ジップボーダーニット xs">トランザクションの利用
Javaでは、JBDC(Java DataBase Connectivity)というデータベース操作専用のAPIが提供されています。
そして、以下の宣言を行うことで自動的にコミットさレルオートコミットモードに戻すことができます。
- con.setAutoCommit(true); : 自動コミットモードの設定
一連ののトランザクションに必要なSQL文を全て送信したら、commitを呼び出してコミットします。
- com.commit(); : 送信済みの処理要求の確定(コミット)
この呼び出しにより、前回のcommit()以降に送信された全てのSQL要求が一つのトランザクションとみなされ、実行結果が確定される。
複数のSQL要求を送信している途中で異常を検知したらり、何らかの理由で処理をキャンセルしたい場合、rollback()を使います。
- con.rollack(); : 送信済みの処理要求をキャンセル(ロールバック)
import java.sql.*;
public class Main {
public static void main(String[] args) {
try {
// JDBCドライバーの有効化
Class.forName("org.h2.Driver");
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
Connection con = null;
try {
// データベースの接続
con = DriverManager.getConnection("jdbc:j2:~/rpgdb"); // JDBC URLを指定
// オートコミット解除
con.setAutoCommit(false);
/** SQL発行処理(省略) */
// トランザクションのコミット
con.commit();
// SQLExceptionが発生した場合の処理
} catch(SQLException e) {
try {
// トランザクションのロールバック
con.rollback();
} catch (SQLException e2) {
// スタックトレースを出力
e2.printStackTrace();
}
} finally {
if(con != null) {
try {
// オートコミット有効化
con.setAutoCommit(true);
// データベース接続の切断
con.close();
} catch(SQLException e3) {
// スタックトレースを出力
e3.printStackTrace();
}
}
}
}
}