java中事务的管理

什么是事务:

  事务,就是一组操作数据库的动作集合。

  一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。

  事务必须满足ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。

  事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示当系统或介质发生故障时,确保已提交事务的更新不能丢失。持久性通过数据库备份和恢复来保证。

 

Java中的事务处理

  一般J2EE服务器支持三种类型的事务管理。即:JDBC事务,JTA事务,容器管理事务。

  最好不要在程序中同时使用上述三种事务类型;并且,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。下面举两个例子说明JDBC及JTA事务,容器管理事务是在特定的框架中实现的(如:Spring的事务管理)

1. JDBC事务

  public String delete(String id) {
    String ID = id;
    db = new getConnection();
    Connection con = db.getConnection();
    try {
      con.setAutoCommit(false);
      db.executeUpdate("delete from helloworld where ID=" + ID); //更新操作1
      db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
          db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3
          con.commit();//提交JDBC事务
          con.setAutoCommit(true); 
              db.close();
          return “success”;
       }catch (Exception e) {
      con.rollBack();//回滚JDBC事务
      e.printStackTrace();
      db.close();
      return “fail”;
    }
  }

  如上例:更新操作1,2,3只有当三步操作都成功完成才进行提交,否则回滚已经进行的操作。这样,保证了数据的完整性,不会因为突然断电等特殊情况导致的数据错误。

 2.JTA事务

  JTA是J2EE事务服务的解决方案、描述了J2EE模型事务接口。JTA具有三个主要的接口:UserTransaction、TransactionManager、Transaction接口。这些接口共享公共的事务操作,如:commit()、rollback()。同时各自也有自己的操作。举例说明:

  public String delete(String id) {
    String ID = id;
    db = new getConnection();
    db.getConnection();
    UserTransaction transaction = sessionContext.getUserTransaction();//获得JTA事务
    try {
      transaction.begin(); //开始JTA事务
      db.executeUpdate("delete from helloworld where ID=" + ID);
      db.executeUpdate("delete from helloworld _book where ID=" + ID);
      db.executeUpdate("delete from helloworld _user where ID=" + ID);
      transaction.commit(); //提交JTA事务
      db.close();
      return”success”;
    } catch (Exception e) {
      try {
        transaction.rollback();//事务回滚
      }catch (Exception e) {
        e.printStackTrace();
      }
       exc.printStackTrace();
       db.close();
       return “fail”;
     }
      }

3.容器事务管理

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

时间: 2024-10-29 15:52:16

java中事务的管理的相关文章

Java中的会话管理——HttpServlet,Cookies,URL Rewriting(译)

参考谷歌翻译,关键字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url-rewriting Java Web应用程序中的会话管理(Session Management)是一个非常有趣的话题.Java Servlet中的会话通过不同的方式进行管理,例如Cookie,HttpSession API,URL重写等. 这是Java Web应用程序系列教程中的第三篇文章,您可能

SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志

SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志 作者:Tony Davis,2012/01/27 系列 本文是进阶系列的一部分:SQL Server中事务日志管理的步骤 当事情进展顺利时,无需特别注意事务日志的作用或工作方式.您只需要确信每个数据库都有正确的备份机制.当出现问题时,了解事务日志对于采取纠正措施很重要,特别是在需要紧急恢复数据库的时间点时!Tony Davis给出了每个DBA都应该知道的正确的细节级别. 在此级别中,我们将回顾在完全恢复模式下工作时进行日志备

十七周-SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志

SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志 By Tony Davis, 2012/01/27 http://www.sqlservercentral.com/articles/Stairway+Series/73785/ 该系列 文是SQL Server中"Stairway系列:事务日志管理的阶梯"的一部分 当事情进展顺利时,不需要特别意识到事务日志的作用或工作原理.你只需要确信每个数据库都有正确的备份机制.当事情出错时,对事务日志的理解对于采取纠正措施

mysql -- 事务隔离级别以及java中事务提交的步骤

SQL标准定义了四种隔离级别,不同隔离的级别使用不当会出现脏读.不可重复读和幻读的问题,隔离级别的出现是事务处理效率与安全的一种平衡. 隔离级别不同会出现的问题 脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的. 不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据. 幻读(Phant

Java中事务总结详解(精华)

1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (isolation)和持久性(durability)的缩写. 事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效. 事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态. 事务的隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可

Java 中的线程管理概念梳理

在Java中,"线程"指java.lang.Thread类的一个实例以及线程的执行,主要使用的线程池是ThreadPoolExecutor以及ScheduledThreadPoolExecutor,要使用固定线程上限的线程池. 用synchronized 修饰静态方法时,表示任何两个不同线程的调用互斥:修饰成员函数时,表示同一对象的多线程方法调用互斥:当然了,synchronized 后的参数可以是任意对象.Synchronized保证了synchronized块中变量的可见性,而vo

java中事务的理解

转载:http://www.cnblogs.com/kristain/articles/2038397.html 一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取.事务的正确执行使得数据库从一种状态转换成另一种状态. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原则.A

Java中的日志管理

日志是应用程序运行中不可缺少的一部分,JAVA中有很多已经成熟的方案,尽管记录日志是应用开发中并不可少的功能,在 JDK 的最初版本中并不包含日志记录相关的 API 和实现.相关的 API(java.util.logging 包,JUL)和实现,直到 JDK 1.4 才被加入.因此在日志记录这一个领域,社区贡献了很多开源的实现.其中比较流行的包括 log4j 及其后继者 logback.除了真正的日志记录实现之外,还有一类与日志记录相关的封装 API,如 Apache Commons Loggi

JAVA中事务的属性ACID;

原子性(ATOMICITY): 一个事务要被完全的无二义性的做完或撤消.在任何操作出现一个错误的情况下,构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态. 一致性(CONSISTENCY): 一个事务应该保护所有定义在数据上的不变的属性(例如完整性约束).在完成了一个成功的事务时,数据应处于一致的状态.换句话说,一个事务应该把系统从一个一致-状态转换到另一个一致状态.举个例子,在关系数据库的情况下, 一个一致的事务将保护定义在数据上的所有完整性约束. 隔离性(ISOLATION):