java事务管理 (转)

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

 

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

java事务管理 (转) 
catch (Exception e) {
java事务管理 (转)  con.rollBack();
//回滚JDBC事务
java事务管理 (转)
  e.printStackTrace();
java事务管理 (转)db.close();
java事务管理 (转)
return “fail”;
java事务管理 (转)  }

java事务管理 (转)}

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

java事务管理 (转) 
catch (Exception e) {
java事务管理 (转)  
try {
java事务管理 (转)   transaction.rollback();
//事务回滚
java事务管理 (转)
  }

java事务管理 (转)  
catch (Exception e) {
java事务管理 (转)   e.printStackTrace();
java事务管理 (转)  }

java事务管理 (转)  exc.printStackTrace();
java事务管理 (转)  db.close();
java事务管理 (转)  
return “fail”;
java事务管理 (转) }

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

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

java事务管理 (转)

上一篇:介绍几个关于C/C++程序调试的函数


下一篇:javascript精髓篇之原型链维护和继承.