
我们说使用事务,可以同时处理程序中两种有关联的任务,在一定程序上也保证了程序处理的安全性。在了解了一些基础的事务后,进一步探讨事务的类型,可以分为:JDBC、JTA和容器事务。下面我们分别就事务中的这三种类型进行概念上的理解,并展示对应的实例使用。
1.JDBC事务
用 Connection 对象控制,JDBC 的 Connection 接口提供了两种事务模式:自动提交、手工提交。
1 2 3 4 | public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
|
JDBC 为使用 Java 进行数据库的事务操作提供了最基本的支持。可以将多个 SQL 语句放到同一个事务中,保证其 ACID 特性。
涉及到多数据库的操作或者分布式场景,JDBC事务就无能为力了。
2.JTA(Java Transaction API)事务
JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。JTA允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public void JtaTransfer() {
javax.transaction.UserTransaction tx = null ;
java.sql.Connection conn = null ;
try {
tx = (javax.transaction.UserTransaction) context.lookup( "java:comp/UserTransaction" );
javax.sql.DataSource ds = (javax.sql.DataSource) context.lookup( "java:/XAOracleDS" );
tx.begin();
conn = ds.getConnection();
conn.setAutoCommit( false );
stmt = conn.createStatement();
stmt.execute( "\
update t_account set amount = amount - 500 where account_id = 'A'" );
stmt.execute( "\
update t_account set amount = amount + 500 where account_id = 'B'" );
tx.commit();
} catch (SQLException sqle){
try {
tx.rollback();
stmt.close();
conn.close();
} catch (Exception ignore){
}
sqle.printStackTrace();
}
}
|
3.容器事务
容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。
以上就是java事务的三种类型介绍,前两者都是比较常见的,关于容器事务这一点大家做一个知识的了解就可以了。看完本篇文章后,可以就其中的事务类型做一个尝试。