码迷,mamicode.com
首页 > 编程语言 > 详细

java事务管理 (转)

时间:2014-05-24 03:21:38      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:style   c   java   tar   ext   http   

什么是事务:
首先,说说什么事务。我认为事务,就是一组操作数据库的动作集合。
事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操 作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。
事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示 当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持 久性表示当系统或介质发生故障时,确保已提交事务的更新不能丢失。持久性通过数据库备份和恢复来保证。

 

Java中的事务处理
一般J2EE服务器支持三种类型的事务管理。即:JDBC事务,JTA事务,容器管理事务。
最好不要在程序中同时使用上述三种事务类型;并且,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。下面举两个例子说明JDBC及JTA事务,容器管理事务是在特定的框架中实现的(如:Spring的事务管理)
1. JDBC事务
bubuko.com,布布扣public String delete(String id) {
bubuko.com,布布扣String ID 
= id;
bubuko.com,布布扣 db 
= new getConnection();
bubuko.com,布布扣 Connection con 
= db.getConnection();
bubuko.com,布布扣 
try {
bubuko.com,布布扣con.setAutoCommit(
false);
bubuko.com,布布扣db.executeUpdate(
"delete from helloworld where ID=" + ID); //更新操作1
bubuko.com,布布扣
  db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
bubuko.com,布布扣
  db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3
bubuko.com,布布扣
  con.commit();//提交JDBC事务
bubuko.com,布布扣
  con.setAutoCommit(true); 
bubuko.com,布布扣db.close();
bubuko.com,布布扣
return “success”;
bubuko.com,布布扣 }

bubuko.com,布布扣 
catch (Exception e) {
bubuko.com,布布扣  con.rollBack();
//回滚JDBC事务
bubuko.com,布布扣
  e.printStackTrace();
bubuko.com,布布扣db.close();
bubuko.com,布布扣
return “fail”;
bubuko.com,布布扣  }

bubuko.com,布布扣}

bubuko.com,布布扣
 
如上例:更新操作1,2,3只有当三步操作都成功完成才进行提交,否则回滚已经进行的操作。这样,保证了数据的完整性,不会因为突然断电等特殊情况导致的数据错误。
 
2.JTA事务
JTA是J2EE事务服务的解决方案、描述了J2EE模型事务接口。JTA具有三个主要的接口:UserTransaction、 TransactionManager、Transaction接口。这些接口共享公共的事务操作,如:commit()、rollback()。同时各 自也有自己的操作。举例说明:
 
bubuko.com,布布扣public String delete(String id) {
bubuko.com,布布扣 String ID 
= id;
bubuko.com,布布扣 db 
= new getConnection();
bubuko.com,布布扣 db.getConnection();
bubuko.com,布布扣 UserTransaction transaction 
= sessionContext.getUserTransaction();//获得JTA事务
bubuko.com,布布扣
 try {
bubuko.com,布布扣  transaction.begin(); 
//开始JTA事务
bubuko.com,布布扣
  db.executeUpdate("delete from helloworld where ID=" + ID);
bubuko.com,布布扣  db.executeUpdate(
"delete from helloworld _book where ID=" + ID);
bubuko.com,布布扣  db.executeUpdate(
"delete from helloworld _user where ID=" + ID);
bubuko.com,布布扣  transaction.commit(); 
//提交JTA事务
bubuko.com,布布扣
  db.close();
bubuko.com,布布扣  
return”success”;
bubuko.com,布布扣 }

bubuko.com,布布扣 
catch (Exception e) {
bubuko.com,布布扣  
try {
bubuko.com,布布扣   transaction.rollback();
//事务回滚
bubuko.com,布布扣
  }

bubuko.com,布布扣  
catch (Exception e) {
bubuko.com,布布扣   e.printStackTrace();
bubuko.com,布布扣  }

bubuko.com,布布扣  exc.printStackTrace();
bubuko.com,布布扣  db.close();
bubuko.com,布布扣  
return “fail”;
bubuko.com,布布扣 }

bubuko.com,布布扣}
 
bubuko.com,布布扣
3.容器事务管理
在Spring、Hibernate等框架中都有各自的事务管理功能。虽然表现形式有些差别,但都是在JAVA事务管理的基础上实现的。这里不进行介绍。

java事务管理 (转),布布扣,bubuko.com

java事务管理 (转)

标签:style   c   java   tar   ext   http   

原文地址:http://www.cnblogs.com/dingding0505/p/3736671.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!