JDBCTemplate 事务控制

**项目场景:**批量导入,前端解析Excel数据,然后批量传入到后端,后端根据数据进行解析,然后在表和关联表进行操作。当对一行数据操作时,如果有错误信息则捕获异常,则不插入该条信息,继续走下。Excel单行数据出错时,要进行回滚,不仅要在单表中回滚,还要在关联表中回滚。

问题: 如何控制事务?如果单表插入数据成功,关联表失败,如果把该单表的数据也回滚,还不能保证前面已经执行完的数据再回滚。

解决: 项目使用的是JDBCTemplate,因为不要抛异常,所以使用try-catch捕获异常
代码:
try { baseDao.operationData(sql1); baseDao.operationData(sql1); baseDao.operationData(sql1); }catch(Exception e){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//throw new RuntimeException() //抛出RuntimeException 也会回滚
}

分析: 事务控制是抛出RuntimeException(),会进行回滚,例如,除数为0.则会对多条执行SQL进行回滚,但是这样效果不是很好。
我们也可以手动设置事务的回滚TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
通过设置事务的状态,达到事务的回滚,最后一条数据执行失败,前面的数据也会回滚。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值