zoukankan      html  css  js  c++  java
  • jdbc事务回滚

    http://yangzg216.iteye.com/blog/1186085

    注意是同一个Statement对象

    首先得清楚什么时候使用事务。
       当你需要一次执行多条SQL语句时,可以使用事务。通俗一点说,就是,如果这几条SQL语句全部执行成功,则才对数据库进行一次更新,如果有一条SQL语句执行失败,则这几条SQL语句全部不进行执行,这个时候需要用到事务。
       其次才是事务的具体使用。
       1.获取对数据库的连接(代码这里省略了吧,网上太多了,对各种数据库的连接的都有)
       2.设置事务不自动提交(默认情况是自动提交的)
         conn.setAutoCommit(false);   其中conn是第一步获取的随数据库的连接对象。
       3.把想要一次性提交的几个sql语句用事务进行提交
         Statement stmt = null;
         stmt = conn.createStatement();
         stmt.executeUpdate(sql1);
         stmt.executeUpdate(Sql2);
         .
         .
         .
         conn.commit();   //使用commit提交事务
      4.捕获异常,进行数据的回滚(回滚一般写在catch块中)
        catch(Exception e)
        {
            ...
            try
            {
               conn.rollback();
            } catch(Exception e)
            {...}
         }
    5.把事务再改成自动提交(默认状态)
       conn.setAutoCommit(true);
      解答各种疑问
      1.回滚的目的是什么呢?
      目的是使得sql1,sql2。。。等操作要么全部执行成功,要么全部执行不成功,这也是为什     么把这几个sql语句当成一个事务来处理的目的。
      2.回滚从哪里开始回滚,我如何控制回滚的起始点。
      其实是可以设置存储点的 Savepoint piont = conn.setSavepoint();
                             conn.rollback(point);
      如果你没有设置存储点,他会回滚到你设置禁止事务自动提交的时候,因为你是先设置禁止自动提交的,再进行executeUpdate(sql)的,所以他会回滚到你的所有执行的这几个sql语句前的状态。

  • 相关阅读:
    Codeforces Round #551 (Div. 2) F. Serval and Bonus Problem (DP/FFT)
    Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)
    BZOJ 5495: [2019省队联测]异或粽子 (trie树)
    洛谷【P2669】NOIP2015普及组 T1金币
    解决Win 10上SSD缓慢问题
    如何保障数据安全
    一个网工的linux学习过程
    JS实现select去除option的使用注意事项
    codevs1506传话(kosaraju算法)
    我的园子
  • 原文地址:https://www.cnblogs.com/lxh520/p/8383673.html
Copyright © 2011-2022 走看看