JDBC事务和数据库事务嵌套的讨论 .
首先必须执行con.setAutoCommit(false)方法,将JDBC事务设置为手动提交,否则手动提交con.commit()无效,手动回滚con.rollback()引发SQLException:AutoCommit 模式设置为“true”时,无法调用回滚操作。
我们执行con.setAutoCommit(false)方法,将JDBC事务设置为手动提交,然后分9种情况讨论JDBC事务和数据库事务。
描述:存储过程里面有一条INSERT语句在数据库事务管理下,而另一条INSERT语句在JDBC事务管理下,假定我们现在执行的语句均不违反约束。
情况一:JDBC事务和数据库事务都既不提交也不回滚
结果:未出现任何异常,但语句也并未提交。
情况二:JDBC事务既不提交也不回滚,数据库事务提交
结果:未出现任何异常,但两条语句均未提交。
情况三:JDBC事务既不提交也不回滚,数据库事务回滚
结果:未出现任何异常,但两条语句均未提交。
情况四:JDBC事务和数据库事务都回滚
结果:在执行con.rollback()的时候出现SQLException:服务器无法继续执行该事务,说明: 3600000001。当然,两条语句均未成功。
情况五:JDBC事务回滚,数据库事务提交
结果:虽然数据库事务提交,但是两条语句均未成功,JDBC事务的回滚影响到了数据库事务。
情况六:JDBC事务回滚,数据库事务既不提交也不回滚
结果:未出现任何异常,但两条语句均未提交。
情况七:JDBC事务提交,数据库事务回滚
结果:在执行con.rollback()的时候出现SQLException:服务器无法继续执行该事务,说明: 3600000001。当然,两条语句均未成功。
情况八:JDBC事务和数据库事务都提交
结果:执行一切顺利,两条语句都正确执行。
情况九:JDBC事务提交,数据库事务既不提交也不回滚
结果:未出现任何异常,但两条语句均未提交。
总结:成功提交的情况只有一种——JDBC事务和数据库事务都提交;若数据库事务提交或回滚,则con.commit()失效,而con.rollback()则会报异常。
推荐配置:若JDBC事务和数据库事务同时存在,数据库事务把提交和回滚的情况配完整,而JDBC事务只需执行con.commit()方法,它会根据数据库事务的情况自动判断是否真正提交。
相关文章
- 数据库之“事务”
- 数据库之 事务
- 数据库事务
- ThinkPHP v3.2.3 数据库读写分离,开启事务时报错:There is no active transaction
- thinkphp6:mysql数据库使用事务(php 8.1.1 / thinkphp v6.0.10LTS)
- 数据库事务浅析
- 数据库事务的四大特性以及4种事务的隔离级别-以及对应的5种JDBC事务隔离级别
- 使用事务码 SAT 比较传统的 SELECT SQL 语句和 OPEN / FETCH CURSOR 分块读取 ABAP 数据库表两种方式的性能差异试读版
- 数据库锁的基本原理
- “分布式事务”的理解(适用于访问多个数据库之间)
- 数据库事务
- 数据库中varchar和Nvarchar区别与联系
- Atitit db access req数据库访问规范jdo jdbc jpa pdo sql 目录 1. 常见特性1 1.1. 元数据 API1 1.2. 分布式事务 vs事务中使用 Sav
- Atitit 数据库抽象层jdbc pdo ado.net等比较与异常点 目录 1. 应该具有的功能1 1.1. 元数据 API1 1.2. 分布式事务 vs事务中使用 Savepoint1
- Atitit 数据库事务实现原理
- 数据库面试题【一、事务四大特性】
- 〖Python 数据库开发实战 - MySQL篇㉛〗- 事务机制的概念与特性
- 〖Python 数据库开发实战 - MySQL篇㉜〗- 事务的隔离级别
- 〖Python 数据库开发实战 - Python与Redis交互篇⑥〗- redis-py 的事务函数
- 数据库索引的作用和长处缺点
- 数据库索引数据结构总结——ART树就是前缀树
- Neo4j图数据库简介和底层原理
- java实用工具mybatis逆向工程mybatis-generator逆向工程可以生成数据库对应的中文字段注释
- linux重置mysql数据库root密码