JDBC事务和数据库事务嵌套的讨论 .
2015-07-07 11:39
399 查看
首先必须执行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()方法,它会根据数据库事务的情况自动判断是否真正提交。
我们执行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()方法,它会根据数据库事务的情况自动判断是否真正提交。
相关文章推荐
- Oracle基础维护02-表、主键、索引、表结构维护手册
- 详解MySQL中的外键约束问题
- Oralce的pl/sql中什么时候用(not)exists比较合适?
- liunx 安装Mysql
- MySql 编码设置
- 执行SQL的DbHelperSQL
- redis批量删除key
- Oracle 索引
- MySQL profiling的用法
- sql server 自定义函数
- mysql 主从复制配置
- MySql执行sql语句相关
- 查看Oracle日志情况
- Oracle 面向对象
- SQLserver Monitor( By Snapshot) Configuration
- SQL语句实现查询当前数据库IO等待状况
- Codesmith连接上了mysql在运行模板的时候始终找不到表问题
- MySQL数据库的查询缓冲机制
- MySQL源码安装
- SqlServer 常用语句