事务提交

本文通过一个具体的Java示例展示了如何使用JDBC进行手动事务管理,包括设置事务为手动提交、执行更新操作、异常处理时的回滚以及最终的提交。
/*
* 事务提交
*/
@Test
public void test5() {
Connection conn = null;
PreparedStatement statement = null;
ResultSet reSet = null;
try {
// 获取连接对象
conn = jdbcUtil.getConnection();
//设置手动执行 true 自动    false 手动
conn.setAutoCommit(false);
// 查询sql语句
String sql1 = "UPDATE student SET NAME='王五' WHERE id=5; ";

String sql2 = "UPDATE student SET NAME='王五' WHERE id=6; ";
//执行存储过程
statement=conn.prepareStatement(sql1);
statement.executeUpdate();


//
statement=conn.prepareStatement(sql2);
statement.executeUpdate();

} catch (Exception e) {
//回滚事务
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
throw new RuntimeException(e);
}
}finally{
//提交事务
try {

conn.commit();

                             jdbcUtil.close(conn, statement, reSet);

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}

}
}
### 事务提交在数据库操作中的实现方式 在数据库操作中,事务提交是确保数据一致性的重要机制。事务是一组数据库操作,它们必须全部成功执行或全部失败,以保证数据的完整性和一致性。事务提交表示事务中的所有操作已经成功完成,并将更改永久保存到数据库中。 在 MySQL 中,可以通过以下方式实现事务提交: 1. **使用 `START TRANSACTION` 和 `COMMIT` 语句** 在执行一组数据库操作之前,使用 `START TRANSACTION` 开启事务,然后依次执行所需的 SQL 语句,最后使用 `COMMIT` 提交事务。例如: ```sql START TRANSACTION; INSERT INTO tran_test VALUES('A', 1); INSERT INTO tran_test VALUES('B', 2); COMMIT; ``` 上述代码表示在事务中插入两条记录,如果所有操作都成功执行,则通过 `COMMIT` 提交事务,数据将被永久保存到数据库中 [^3]。 2. **在事务中处理异常并回滚** 如果在事务执行过程中发生错误,可以通过捕获异常并使用 `ROLLBACK` 语句撤销事务中的所有操作。例如,定义一个变量 `t_error` 来标识是否发生异常,如果 `t_error` 为 1,则执行 `ROLLBACK`;否则执行 `COMMIT` [^4]。 3. **在编程环境中使用事务** 在编程语言中(如 Java),可以通过注解或 API 实现事务管理。例如,在 Spring 框架中,可以使用 `@Transactional` 注解来声明事务边界。事务提交后,可以注册同步回调以执行后续操作,如将数据写入缓存或通知其他系统: ```java @Override @Transactional public HrDataDictionary add(HrDataDictionary param) throws Exception { // 执行新增操作 List<HrDataDictionary> list = hrDataDictionaryExtMapper.selectAll(); jimClientService.saveToRedis(DICT_LIST_KEY, JSON.toJSONString(list)); // 注册事务提交后的操作 TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { @Override public void afterCommit() { try { unifyFilingService.informHRSign(); } catch (Exception e) { logger.error("请求HR电子签异常:{}", e); } } }); return hrDataDictionary; } ``` 上述代码中,`@Transactional` 注解确保方法在事务上下文中执行。在事务提交完成后,通过 `TransactionSynchronizationManager.registerSynchronization` 注册的回调方法 `afterCommit` 会被执行 [^2]。 4. **事务的自动提交模式** MySQL 默认情况下是自动提交模式,即每条 SQL 语句都被视为一个独立事务,并在执行后立即提交。可以通过设置 `autocommit=0` 来关闭自动提交模式,从而手动控制事务提交和回滚。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值