一直以来,都认为Connection如果设置了setAutoCommit(false)后,启动手工事务提交,必须手工进行commit或者rollback才行。今天正好遇到一个问题,结果大跌眼镜。
于是测试了一下,结果如下(请注意在oracle驱动下,其他环境未知):
1、设置了setAutoCommit(false)后执行后续DML的数据更新操作,没有显式手工进行commit或者rollback,最后设置setAutoCommit(true),后关闭连接,默认提交成功。
2、设置了setAutoCommit(false)后执行后续DML的数据更新操作,执行两段sql更新,中间rollback,第一部分回滚,第二部分不显式手工进行commit,默认提交。
3、设置了setAutoCommit(false)后执行后续DML的数据更新操作,没有显式手工进行commit或者rollback,最后没有设置setAutoCommit(true),关闭连接,默认提交成功。
小结:设置了setAutoCommit(false)后,除非显式rollback,否则默认提交;没有任何显式commit或rollback,设置设置setAutoCommit(true)或者关闭连接,之前的事务也会默认提交。
时间: 2024-10-12 07:46:41