java事务的类型有哪几个

们说使用事务,可以同时处理程序中两种有关联的任务,在一定程序上也保证了程序处理的安全性。在了解了一些基础的事务后,进一步探讨事务的类型,可以分为:JDBC、JTA和容器事务。下面我们分别就事务中的这三种类型进行概念上的理解,并展示对应的实例使用。

1.JDBC事务

Connection 对象控制,JDBC 的 Connection 接口提供了两种事务模式:自动提交、手工提交。

publicvoidsetAutoCommit(boolean)
publicbooleangetAutoCommit()
publicvoidcommit()
publicvoidrollback()

JDBC 为使用 Java 进行数据库的事务操作提供了最基本的支持。可以将多个 SQL 语句放到同一个事务中,保证其 ACID 特性。

涉及到多数据库的操作或者分布式场景,JDBC事务就无能为力了。

2.JTA(Java Transaction API)事务

JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。JTA允许应用程序执行分布式事务处理–在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。

publicvoidJtaTransfer(){
javax.transaction.UserTransactiontx=null;
java.sql.Connectionconn=null;
try{
tx=(javax.transaction.UserTransaction)context.lookup("java:comp/UserTransaction");//取得JTA事务,本例中是由Jboss容器管理
javax.sql.DataSourceds=(javax.sql.DataSource)context.lookup("java:/XAOracleDS");//取得数据库连接池,必须有支持XA的数据库、驱动程序
tx.begin();
conn=ds.getConnection();
//将自动提交设置为false,
//若设置为true则数据库将会把每一次数据更新认定为一个事务并自动提交
conn.setAutoCommit(false);
stmt=conn.createStatement();
//将A账户中的金额减少500
stmt.execute("\
updatet_accountsetamount=amount-500whereaccount_id='A'");
//将B账户中的金额增加500
stmt.execute("\
updatet_accountsetamount=amount+500whereaccount_id='B'");
//提交事务
tx.commit();
//事务提交:转账的两步操作同时成功
}catch(SQLExceptionsqle){
try{
//发生异常,回滚在本事务中的操做
tx.rollback();
//事务回滚:转账的两步操作完全撤销
stmt.close();
conn.close();
}catch(Exceptionignore){
}
sqle.printStackTrace();
}
}

3.容器事务

容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。

原文来自:https://www.py.cn

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容