分享

JAVA用JDBC来Rollback

 闲来看看 2012-04-05
commit和rollback是数据库事务的两个概念。
一个数据库事务有开始和结束边界(boundary), 位于boundary的对数据库的各种操作认为是对该事务的操作。
一个事务的要占用数据库的一些资源,比如可能获得数据库的某个表的某条记录的lock,如果一个事务长期占用资源而不去释放,那么对其他的事务是不利的,可能会使得速度很慢。
所以对数据库操作的正确做法是让事务短小,只做一些应该在事务里边做的事情,以最快的速度让一个事务结束,从而释放该事务所占有的资源。
如何让一个事务结束?commit或者rollback。两者选其一,而且必选其一,才能够确保一个事务被可靠的,安全的终止。commit意味着对事务中的操作确定,rollback意味着对事务中的操作否定。

JDBC中如何正确的处理事务?
1。如果需要保持一些操作的原子性,比如转帐就需要原子性,那么必须要将这些操作放在一个事务中。
//Connection conn = ...;   
  1. boolean success = false;  
  2. try  
  3. {  
  4.     conn.setAutoCommit(false);  
  5.     //do something   
  6.     conn.commit();  
  7.     success = true;  
  8. }  
  9. catch(SQLException e)  
  10. {  
  11.     conn.rollback();  
  12.     success = false;  
  13. }  
  14. if(success)  
  15. //do something  



2。如果不需要处理原子性的操作,比如查询 (SELECT),那么只需要conn.setAutoCommit(true);做就可以了。

 

也可以这样, 其实都一样的.

 

  1. java.sql.Connection conn = null;  
  2. try {  
  3.     //创建你的dataSource   
  4.     //...   
  5.     //获取数据库连接   
  6.     conn = dataSource.getConnection();  
  7.     System.out.println("jdbc connection init");  
  8.      
  9.     //开始事务,配置不自动提交   
  10.     conn.setAutoCommit(false);  
  11.      
  12.     //执行sql语句   
  13.     java.sql.Statement st = conn.createStatement();  
  14.     sql = "DELETE FROM user where userId=1";  
  15.     st.execute(sql);  
  16.      
  17.     //commit事务   
  18.     conn.commit();  
  19. }catch(Exception e) {   //异常处理,操作失败之后回滚数据库   
  20.     if (conn != null) {  
  21.         try {  
  22.             //数据库回滚rollback   
  23.             conn.rollback();  
  24.             conn.commit();  
  25.         }catch(Exception ex) {  
  26.             System.out.println("MySQL Rollback Fail: " + e.getMessage());  
  27.         }  
  28.     }  
  29.     System.out.println("Delete Fail: " + e.getMessage());  
  30. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多