第一次用jdbc的事务回滚,但是rollback为什么没反应

 我来答
匿名用户
2016-05-23
展开全部
//这里给你稍微改了改,这样就可以测试rollback了
    public void save() throws Exception{
      //创建数据库连接
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/db_dark", "root", "123456");
      //加载驱动
      Class.forName("com.mysql.jdbc.Driver");
      //设置不自动提交
      conn.setAutoCommit(false);
      Statement stmt = conn.createStatement();
      try{
          String sSql = "insert into area (name) values ('hh')";
          //执行插入操作
          stmt.executeUpdate(sSql);
          //这里故意让其抛出一个异常
          String sNull = null;
          //如果想正常执行commit提交更改,则注释下面这个判断
          if (sNull.equals("")){
              //上面这个判断会导致系统抛出一个空指针异常NullPointerException
              //注意以后判断字符串是否为空的时候应该这样写
              //if ("".equals(sNull))这样就不会报错空指针了
          }
     
          //如果语句执行到这里无异常,提交事物!
          conn.commit();
          //抛出一个运行时异常(现在抛出的异常其实不是这个新创建的,因为在上面已经抛出了空指针异常)
          throw new RuntimeException();
      }catch(Exception e){
          //打印异常信息
          e.printStackTrace();
          //遇到异常回滚事物,不提交更改
          conn.rollback();
          //设置自动提交
          conn.setAutoCommit(true);
      }finally{
          //非空的时候才关闭
          if (stmt != null){
            stmt.close();
          }
          //先创建的最后关闭
          if (conn != null){
            conn.close();
          }
      }
    }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式