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

  • 相关阅读:
    点分治练习
    PKU-2723 Get Luffy Out(2-SAT+二分)
    tarjan求割点与割边
    tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows
    数算日子荣耀神
    《JavaScript DOM编程艺术》笔记
    CSS链接的样式a:link,a:visited,a:hover,a:active
    chrome调试技巧--持续更新
    CSS文字大小单位PX、EM的区别
    【转】如何成为一名优秀的web前端工程师(前端攻城师)?
  • 原文地址:https://www.cnblogs.com/firstdream/p/4626499.html
Copyright © 2011-2022 走看看