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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。