JDBC事物回滚怎么不起作用
发布网友
发布时间:2022-04-10 03:09
我来回答
共1个回答
热心网友
时间:2022-04-10 04:38
JDBC 事务不回滚?
有两种情况,先看 autoCommit(true),在JDBC规范中有这样一段描述:
Newly created Connection objects are in auto-commit mode by default, which means that indivial SQL statements are committed automatically when the statement is completed.
可看出,只要你的SQL 本身没有问题,JDBC就会自动提交,但是比如接入数据发生异常,抛出SQLException的时候事务不会回滚的。
所有通常会手工控制,但是这里还有一个坑,就是有些数据源,会使用代理模式,将真正的Connection 包裹起来(依据架构和组件的不同,可能会有很多层包裹),你需要getMeterConnection 后,在对元Connection设置AutoCommit ,否则无论你怎么写,轻者异常,重者不通知成为“悬案”。
如果你使用了JTA,事务不回滚,依然正常,JTA 不是所有的异常都回滚的,只有对unCheckException 才回滚,换句话说,只有对RuntimeException 或其子异常才回滚。