Java的事务控制
交易
“事务是将一系列操作作为一个整体进行处理的逻辑单位。如果属于同一个事务的SQL处理有多个的话”
-
- すべてが成功して初めて処理結果を確定する(コミット)
- 途中で失敗したら、トランザクション実行前の状態に戻す(ロールバック)
在数据库中,将处理结果确认为commit,将状态恢复到执行之前的状态称为rollback。
使用交易
在Java中,提供了一个专门用于数据库操作的API,称为JBDC(Java DataBase Connectivity)。要使用JBDC指示事务控制,需要使用Connection对象。
1. 在连接建立后立即设置自动提交()-接连接
2. 在连接建立后立即设置自动提交()-接连接
3. 建立连接后立即设置自动提交()-接连接
4. 连接建立后立即设置自动提交()-接连接
5. 确立连接后立即设置自动提交()-接连接
在JBDC中,默认情况下,SQL在每次发送时都会自动提交,进入自动提交模式。您可以通过执行以下声明来明确进行事务控制。
- con.setAutoCommit(false); : 自動コミットモードの解除
并且,通过执行以下声明,您可以自动将其提交回自动提交模式。
- con.setAutoCommit(true); : 自動コミットモードの設定
2. 执行完一连串的SQL后
当您发送完毕涉及的所有SQL语句来执行一系列事务时,请调用commit函数进行提交。
- com.commit(); : 送信済みの処理要求の確定(コミット)
通过这个调用,被发送自上次commit()以来的所有SQL请求被视为一个事务,并且执行结果被确定。
当检测到异常情况时,执行回滚操作。
如果在发送多个SQL请求的过程中检测到异常,并且出于某种原因想要取消处理,可以使用rollback()函数。
- con.rollack(); : 送信済みの処理要求をキャンセル(ロールバック)
通过这个调用,commit()之后发送的所有SQL请求都将回滚。另外,即使在程序中没有显式调用rollback,在数据库连接中断、Java程序或数据库强制终止导致最终没有发出commit()时,数据库将自动执行回滚操作。
示例代码
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();
}
}
}
}
}