事务处理

1.什么是事务?

从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。

要么全部执行,要么撤销全部不执行。

java事务就是通过JDBC来实现的。

2.为什么需要事务?

未解决数据安全操作提出的。事务控制实际上就是控制数据的安全访问。

3.JDBC事务

JDBC事务是用Connection对象控制的。Connection提供了两种事务模式:自动提交和手工提交。默认是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则调用rollback()来回滚。

可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,若其中一个表达式操作失败,都不会执行到commit(),并将产生异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以多次更新操作后相关数据的一致性。

例:

package sqltest;
import java.sql.*;
class Dbtest2 {
  public static void main (String args[]) throws Exception {
      String url = null;
      String sql = "insert into userinfo values('love', '123')"; 
      Connection con = null;
      Statement stmt = null;
      try{
          url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=QQ;user=sa;password=123456";
          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
          con = DriverManager.getConnection(url,"sa","123456");
          stmt = con.createStatement();
          con.setAutoCommit(false);//取消自动提交事务
          stmt.executeUpdate(sql);
          stmt.executeUpdate(sql);
          con.commit();//提交事务
          con.close();
      }catch(Exception e1){
          try{
              con.rollback();
          }catch(SQLException e2){
              
          }
      }

      
  }
}

这里特意增加两条相同的记录,第一条记录添加成功,第二条记录添加不成功。但记录没有添加到数据库中,说明事务全部回滚。

 

posted @ 2017-05-25 20:37  奇热行  阅读(153)  评论(0)    收藏  举报