当前位置: 首页 > news >正文

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()方法,它会根据数据库事务的情况自动判断是否真正提交。

转载于:https://www.cnblogs.com/firstdream/p/4626499.html

相关文章:

  • 独立思考Justic:Putting a Price Tag on Life
  • CAAnimationGroup(组合动画)创建
  • 做YH更新,引发众多思考.
  • Chrome书签整理
  • VS2012 JSON、XML自动生成对应的类
  • [珍藏版]微软等数据结构+算法面试100题全部出炉
  • GooFlow
  • linux 中部署ant编译的包中缺少问题
  • 云计算的胜利 Android轻松运行魔兽世界
  • MongoDB的学习--索引类型和属性
  • No suitable driver found for jdbc:mysql://localhost/dbname
  • 报告称2013年中国网页游戏用户规模将达8千万
  • POJ 1503 Integer Inquiry 大数 难度:0
  • 从Wi-Fi事件看无线网络的安全性
  • BZOJ 1257 余数之和sum
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 03Go 类型总结
  • Android优雅地处理按钮重复点击
  • create-react-app项目添加less配置
  • css系列之关于字体的事
  • javascript 总结(常用工具类的封装)
  • JavaScript新鲜事·第5期
  • js作用域和this的理解
  • SpiderData 2019年2月25日 DApp数据排行榜
  • springboot_database项目介绍
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue 2.3、2.4 知识点小结
  • 简单基于spring的redis配置(单机和集群模式)
  • 解决iview多表头动态更改列元素发生的错误
  • 在weex里面使用chart图表
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • FaaS 的简单实践
  • 阿里云服务器如何修改远程端口?
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #includecmath
  • #stm32整理(一)flash读写
  • (+4)2.2UML建模图
  • (0)Nginx 功能特性
  • (33)STM32——485实验笔记
  • (Note)C++中的继承方式
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (第一天)包装对象、作用域、创建对象
  • (多级缓存)缓存同步
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十一)图像的罗伯特梯度锐化
  • (算法设计与分析)第一章算法概述-习题
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转) ns2/nam与nam实现相关的文件
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Unity3DUnity3D在android下调试
  • (转)负载均衡,回话保持,cookie