欢迎来到天天文库
浏览记录
ID:35504883
大小:59.42 KB
页数:4页
时间:2019-03-25
《数据库原理及应用(王向辉)java事务的类型》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。Java事务的类型有三种:JDBC事务、JTA(JavaTransactionAPI)事务、容器事务。1、JDBC爭务JDBC申务是用Connection对■彖控制的。JDBCConnection接口(java.sql.Connection)捉供了两种申务模式:口动提交和手工提交。java.sql
2、.Connection提供了以下控制事务的方法:publicvoidsetAutoCommit(boolean)publicbooleangetAutoCommit()publicvoidcommit()publicvoidrollback()使用JDBC事务界定时,您可以将多个SQL语句结合到一个事务中。JDBC事务的一个缺点是事务的范围局限于一个数据库连接。一个JDBC事务不能跨越女个数据库。JavaBean屮使用JDBC方式进行事务处理实例:有一个订单库存管理系统,每一次生成订单的同时我们都要消
3、减库存。通常來说订单和库存在数据库里是分两张表來保存的:订单表,库存表。每一次追加一个订单实际上需要两步操作:衣订单表中插入一条数据,同时修改库存的数据。try{Connectionconn=gctConnection();//不管如何我们得到了链接conn.setAutoCommit(false);//插入订单//修改库存conn,commit();//成功的情况下,提交更新。}catch(SQI.Exceptionex){conn,rollback()://失败的悄况下,回滚所有的操作}final
4、ly{conn.closeO;)2、JTA(JavaTransactionAPI)事务JTA是事务服务的J2EE解决方案。本质上,它是描述爭务接口(比如UserTransaction接口,开发人员直接使用该接II或者通过J2EE容器使用该接口來确保业务逻辑能够可靠地运行)的J2EE模型的-部分。JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA來访问事务。JTA允许应用程序执行分布式事务处理一在两个或多个网络计算机资源上访问并FL更新数据,这些数据可以分布在多个数
5、据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。如果计划用JTA界定事务,那么就需要有一个实现javax.sql.XADataSource、javax.sql.XAConnection和javax.sql.XAResource接口的JDBC驱动程序。一个实现了这些接口的報动程序将可以参与JTA事务。一个XADataSource对彖就是一个XAConnection对象的工厂。XAConnections是参与JTA事务的JDBC连接。您将需要川应川服务器的管理工具设置XADataSource
6、。从应川服务器和JDBC驱动程序的文档中可以了解到相关的指导。J2EE应用程序用JNDI査询数据源。一旦应用程序找到了数据源对象,它就调用javax.sql.DataSource.getConnection()以获得到数据廂的连接。XA连接与非XA连接不同。一定要记住XA连接参与了JTA事务。这意味着XA连接不支持JDBC的自动提交功能。同时,应用程序一定不耍对XA连接调用java.sql.Connection.commit()或者java.sql.Connection.rollback()。相反,应
7、用程序应该使用UserTransaction.begin()、UserTransaction.commit()和UserTransaction.rollback。。实例:例如订单表在订单库中,库存表在库存库中,那么我们如何处理这样的事务呢?try{Connectionconnl=getConnec(ionl();Connectionconn2=getConnection2();//基于connl做插入操作//基于conn2做更新操作try{connl.commit()}catch(SQLExcetio
8、n){connl.rollbackO;}try{conn2.commit();}catch(SQLException){conn2.rollbakc();//保证肯定删除刚才插入的订单。}}catch(SQLExceptionex){//如果插入失败,connl.rollback〃如果更新失败,connl.rollback&&conn2.rollback}finally{connI.close。;conn2.close();}3、容器事务容器爭务主婆是J
此文档下载收益归作者所有