wait 发表于 2016-1-13 21:33:24

JDBC处理事务的方法

   一个事务是由一条或多条对数据库操作的SQL语句所组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库。在JDBC中,一般是通过commit()方法或是rollback()方法来结束事务的操作。其中commit()方法表示完成对事务的提交,rollback()方法表示完成事务回滚,多用于在处理事务的过程中出现了异常的情况,这两种方法都位于java.sql.Connection类中。一般而言,事务默认操作是自动提交,即操作成功后,系统将自动调用commit()方法,否则将调用rollback()方法。   当然,在JDBC中,也可以通过调用setAutoCommit(false)方法来禁止自动提交,然后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()方法实现整体提交,如果其中一个表达式操作失败,就会抛出异常而不会调用commit()方法。在这种情况下就可以在异常捕获的代码块中调用rollback()方法进行事务回滚。通过此种方法可以保持对数据库的多次操作后,数据仍然保持一致性。示例代码如下: import java.sql.*;
public class Test{   
    public static void main(String[] args) throws Exception {
           String user = "user1";
               String password = "pwd1";
               String url = "jdbc:mysql://localhost:3306/Test";
               String driver = "com.mysql.jdbc.Driver";
               Connection con = null;
               Statement stmt = null;
               ResultSet rs = null;
               try{
                       Class.forName(driver);
                       con = DriverManager.getConnection(url, user, password);       
                       con.setAutoCommit(false); //禁止自动提交
                        stmt=con.createStatement();
                        stmt.addBatch("insert into Employee values(3,'James3',26)");
                        stmt.addBatch("delete from Employee where id=1");
                        stmt.executeBatch();
                        con.commit(); //提交事务
               }
               catch(SQLException e1){
                       if(con!=null)
                               //事务回滚
                               con.rollback();
               }finally{         
             try
             {
               if(rs != null) rs.close();
               if(stmt != null) stmt.close();
               if(con != null) con.close();
             }
             catch(SQLException e)
             {
               System.out.println(e.getMessage());
             }            
         }               
    }
}


页: [1]
查看完整版本: JDBC处理事务的方法