java中如何进行事务的处理,Java中事务

  java中如何进行事务的处理,Java中事务

  1.什么是Java事务?

  一般认为,事务与数据库有关。事务是访问数据库的操作序列,数据库应用系统通过事务集访问数据库。事务的正确执行使数据库从一种状态变为另一种状态。

  交易必须遵守ISO/IEC制定的ACID原则。

  酸是原子性、一致性、隔离性和持久性的缩写。交易必须遵守ISO/IEC制定的ACID原则。酸是原子性、一致性、隔离性和持久性的缩写。

  一、原子性

  即不可分割性,即所有交易要么执行,要么不执行。如果事务的所有子事务都提交成功,则所有数据库操作都提交,数据库状态发生变化;如果一个子事务失败,其他子事务的数据库操作将回滚,即数据库将返回到事务执行前的状态,不会发生状态转换。

  B.一致性

  事务的执行使数据库从一种正确的状态变为另一种正确的状态。

  c、隔离

  在事务正确提交之前,不允许向任何其他事务提供该事务所做的任何数据更改,即在事务正确提交之前,其可能的结果不应显示给任何其他事务。

  D.坚持

  交易提交正确后,其结果将永久保存在数据库中,即使交易提交后出现其他失败,交易的处理结果也将被保存。

  既然事务的概念来源于数据库,那么什么是Java事务呢?有什么联系?

  事实上,一个Java应用系统,如果操作一个数据库,是通过JDBC实现的。然后,添加、修改、删除都是通过相应的方法间接实现的,事务的控制权也相应地转移到Java程序代码上。因此,数据库操作的事务习惯上称为Java事务。

  2.为什么需要交易?

  底线:保持数据的一致性。

  3.Java交易类型

  有三种类型的Java事务:JDBC事务、JTA(Java事务API)事务和容器事务。下面是最简单的介绍,最后会介绍jdbc事务的使用。另外两个可以自己搜索学习。

  一、JDBC交易

  JDBC事务由连接对象控制。JDBC连接接口(java.sql.Connection)提供了两种交易模式:自动提交和手动提交。Java.sql.Connection提供了以下方法来控制事务:

  公共void setAutoCommit(布尔值)

  public boolean getAutoCommit()

  公共void提交()

  当public void rollback()使用JDBC事务定义时,可以将多个SQL语句组合成一个事务。JDBC事务的一个缺点是事务的范围仅限于一个数据库连接。一个JDBC事务不能跨多个数据库。

  B.JTA(Java事务API)事务

  JTA是一个高级的、独立于实现和协议的API。应用程序和应用服务器可以使用JTA来访问事务。

  JTA允许应用程序执行分布式事务处理——访问和更新两个或更多网络计算机资源上的数据,这些资源可以分布在多个数据库中。JDBC驱动程序的JTA支持大大增强了数据访问能力。

  如果您计划用JTA定义事务,您需要一个JDBC驱动程序来实现javax.sql.XADataSource、javax . SQL . x connection和javax.sql.XAResource的接口

  实现这些接口的驱动程序将能够参与JTA事务。XADataSource对象是XAConnection对象的工厂。x connections是参与JTA事务的JDBC连接,您需要用应用服务器的管理工具设置XADataSource。

  J2EE应用程序使用JNDI来查询数据源。一旦应用程序找到数据源对象,它就调用javax . SQL . data source . getconnection()来连接数据库。

  XA连接不同于非XA连接。记住XA连接参与JTA事务是很重要的。这意味着XA连接不支持JDBC的自动提交功能。同时,应用程序不得为XA连接调用java.sql.Connection.commit()或java.sql.Connection.rollback()。

  相反,应用程序应该使用UserTransaction.begin()、UserTransaction.commit()和serTransaction.rollback()。

  集装箱交易

  容器事务主要由J2EE应用服务器提供,容器事务大多基于JTA完成,这是一个基于JNDI的相当复杂的API实现。与编码实现JTA事务管理相比,我们可以通过EJB容器提供的容器事务管理机制(CMT)来完成同样的功能,该机制由J2EE应用服务器提供。

  这允许我们简单地指定将哪个方法添加到事务中。一旦指定,容器将负责事务管理任务。这是我们的土木工程解决方案,因为通过这种方式,我们可以将交易代码排除在逻辑代码之外,同时将所有困难交给J2EE集装箱解决。

  使用EJB CMT的另一个好处是程序员不需要关心JTA API的编码,但是理论上我们必须使用EJB。

  d、利用JDBC交易

  (1)步骤:

  首先,将事务提交模式设置为非自动提交:conn . set auto commit(false);接下来,将需要添加事务的代码放入try,catch块。

  然后,在try块中添加事务的提交操作,表示操作中没有异常。提交事务:conn . commit();特别是不要忘记在catch块中增加一个rollback事务,表示操作异常,事务被取消:conn . roll back();最后,将事务提交模式设置为自动提交:conn . set auto commit(true);这样,通过简单的几个步骤,我们就可以完成事务处理的编写。

  (2)伪代码:

  con=driver manager . getconnection(URL,user,password);

  字符串结果=“”;

  字符串SQL 1=“”;

  //LAST_INSERT_ID()获取刚刚插入的自动递增ID

  字符串SQL 2=“”;

  int标志;

  尝试{

  con . set auto commit(false);//更改JDBC事务的默认提交方法

  PS TMT=con . prepare statement(SQL 1);

  flag=PS TMT . execute update();

  如果(标志0) {

  PS TMT=con . prepare statement(SQL 2);

  int I=PS TMT . execute update();

  如果(i 0) {

  con . commit();//提交JDBC事务

  结果=添加数据成功!;

  }否则{

  结果=添加数据失败!;

  }

  }否则{

  结果=添加数据失败!;

  }

  } catch (SQLException e) {

  尝试{

  con . roll back();//回滚JDBC事务

  } catch (SQLException e1) {

  //TODO自动生成的catch块

  结果=添加数据失败!SQLException’;

  E1 . printstacktrace();

  }

  结果=添加数据失败!SQLException’;

  e . printstacktrace();

  }最后{

  尝试{

  con . set auto commit(true);//恢复JDBC事务的默认提交方法

  } catch (SQLException e) {

  //TODO自动生成的catch块

  e . printstacktrace();

  }

  }

  返回结果;4.三笔交易的差异

  1.JDBC事务控制的局限性在于数据库连接,但它很容易使用。

  2.JTA事务是强大的,它可以跨越多个数据库或Dao,并且使用起来很复杂。

  3.容器事务主要是指J2EE应用服务器提供的事务管理,仅限于EJB应用。

  5.摘要

  事务控制是构建J2EE应用不可或缺的一部分,合理选择应用哪个事务对整个应用系统至关重要。一般来说,单个JDBC连接时可以选择JDBC交易,多个连接或数据库交叉时要选择JTA交易,如果使用EJB可以考虑EJB集装箱交易。

  更多信息请关注java基础课程专栏。以上是JAVA中事务处理的细节。更多信息请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: