日期:2014-05-16  浏览次数:20395 次

事务的操作
      事务是为了确保数据库的完整性。当所有语句都顺利执行后,事务可以提交,否则,如果其中某个语句遇到错误,那么事务将被回滚,就好像没有执行过任何命令一样。

      如果将更新语句组合成一个事务,那么事务要么成功执行所有的操作并被提交,要么在中间某个位置发生失败,在这种出现失败的情况下,可以执行回滚操作,
将数据库自动撤销回上次提交事务以来的所有更新操作产生的影响。

      默认情况下,数据库处于自动提交模式。每个SQL语句一旦被执行便会被提交给数据库,一旦命令提交,就无法对他进行回滚操作。
    
     一、 事务的回滚
      Connection conn = DriverManager.getCommection(url,username,password);

      可以使用 conn.setAutoCommit(false);来关闭自动提交。
      然后调用Statement stat=conn.createStatement();来创建语句对象。
      用stat.executeUpdate(SQL语句);执行sql命令,执行完之后,调用conn.commit()方法,出现错误则调用conn.rollback()进行回滚。
  

       二、 保存点的使用

      为了更好的控制事务的回滚操作,我们可以设置保存点(Save point),创建一个保存点意味着稍后只需返回到这个点,而不是整个事务的开头

      Connection conn = DriverManager.getCommection(url,username,password);

      Statement stat=conn.createStatement();
      stat.executeUpdate(SQL语句);
      Savepoint svpt= conn.setSavepoint();
      stat.executeUpdate(SQL语句);
      if(...)
      {
         conn.rollback(avpt);
      }
      else
      {
      conn.commit();
      }

     这里,我们使用了匿名保存点,也可以给他添加名字如

     Savepoint svpt= conn.setSavepoint("savepoint");
     当使用一个保存点完成所有操作后,必须释放:
    conn.releaseSavepoint(svpt);