JDBC是Java基础当中的一个重难点,在早期的入门学习阶段,要把JDBC吃透,对于之后的学习,依据数据库学习,都是有帮助的。之前我们对JDBC也做过一些相关的介绍,今天的大数据编程学习分享,我们主要来讲讲JDBC事务处理的部分。
JDBC事务,就是在Java中用来控制数据库事务的。JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理。在JDBC中,常用的和事务相关的方法是: setAutoCommit、commit、rollback等。
JDBC事务的定义
关于JDBC的事务,相对来说比较简单,主要就是通过JDBC API来控制数据库的事务执行。
下面看一个简单的JDBC事务代码:
public void JdbcTransfer() {
java.sql.Connection conn = null;
try{
conn = conn =DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","userpwd");
// 将自动提交设置为 false,
//若设置为 true 则数据库将会把每一次数据更新认定为一个事务并自动提交
conn.setAutoCommit(false);
stmt = conn.createStatement();
// 将 A 账户中的金额减少 500
stmt.execute("\
update t_account set amount = amount - 500 where account_id = 'A'");
// 将 B 账户中的金额增加 500
stmt.execute("\
update t_account set amount = amount + 500 where account_id = 'B'");
// 提交事务
conn.commit();
// 事务提交:转账的两步操作同时成功
} catch(SQLException sqle){
try{
// 发生异常,回滚在本事务中的操做
conn.rollback();
// 事务回滚:转账的两步操作完全撤销
stmt.close();
conn.close();
}catch(Exception ignore){
}
sqle.printStackTrace();
}
}
上面的代码实现了一个简单的转账功能,通过事务来控制转账操作,要么都提交,要么都回滚。
JDBC事务的优缺点
JDBC为使用Java进行数据库的事务操作提供了最基本的支持。通过JDBC事务,我们可以将多个SQL语句放到同一个事务中,保证其ACID特性。JDBC事务的主要优点就是API比较简单,可以实现最基本的事务操作,性能也相对较好。
但是,JDBC事务有一个局限:一个 JDBC 事务不能跨越多个数据库!所以,如果涉及到多数据库的操作或者分布式场景,JDBC事务就无能为力了。于是又有了JTA事务。
为什么需要JTA
通常,JDBC事务就可以解决数据的一致性等问题,鉴于他用法相对简单,所以很多人关于Java中的事务只知道有JDBC事务,或者有人知道框架中的事务(比如Hibernate、Spring)等。但是,由于JDBC无法实现分布式事务,而如今的大数据分布式场景越来越多,所以,JTA事务就应运而生。
JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接、JDO PersistenceManager 对象、JMS 队列、JMS 主题、企业JavaBeans(EJB)、一个用J2EE Connector Architecture 规范编译的资源分配器。
JTA和它的同胞Java事务服务(JTS:Java TransactionService),为J2EE平台提供了分布式事务服务。不过JTA只是提供了一个接口,并没有提供具体的实现,而是由J2EE服务器提供商根据JTS规范提供的,常见的JTA实现有以下几种:
1.J2EE容器所提供的JTA实现(JBoss)
2.独立的JTA实现:如JOTM,Atomikos.这些实现可以应用在那些不使用J2EE应用服务器的环境里用以提供分布事事务保证。如Tomcat,Jetty以及普通的java应用。
JTA事务相对复杂,可以用于处理跨多个数据库的事务,是分布式事务的一种解决方案。而在大数据当中,分布式场景需求较多,对于JTA这部分也建议大家有相应的理解和掌握。
关于大数据编程学习,Java基础之JDBC事务处理,以上就为大家做了基本的介绍了。JDBC事务处理,首先需要大家对事务这个概念定义搞清楚,其次再落实到JDBC当中去,逐步深入,多多练习。
网友评论