原文链接:http://longdechuanren.iteye.com/blog/632403
1、事务的概念与JDBC事务处理
(1)原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
(2)一致性(consistency):在事务处理执行前后,数据库是一致的(两个账户要么都变,或者都不变)。
(3)隔离性(isolcation):一个事务处理对另一个事务处理没有影响。
(4)持续性(durability):事务处理的效果能够被永久保存下来 。
举例:银行转账
connection.setAutoCommit(false);//打开事务。
.....
....把进行转账的两步操作放在同一个事务中,如果一个出现异常,马上回滚
.....
connection.commit();//提交事务。
connection.rollback();//回滚事务。
2、事务的保存点处理:定义保存点可以用来回滚一部分内容
- static void test() throws SQLException {
-
Connection conn = null;
-
Statement st = null;
-
ResultSet rs = null;
-
-
Savepoint sp = null;
-
try {
- conn = JdbcUtils.getConnection();
-
conn.setAutoCommit(false);
- st = conn.createStatement();
-
-
String sql = "update user set money=money-10 where id=1";
- st.executeUpdate(sql);
-
- sp = conn.setSavepoint();
-
-
-
sql = "update user set money=money-10 where id=3";
- st.executeUpdate(sql);
-
-
sql = "select money from user where id=2";
- rs = st.executeQuery(sql);
-
float money = 0.0f;
-
if (rs.next()) {
-
money = rs.getFloat("money");
- }
-
-
if (money > 300)
-
throw new RuntimeException("已经超过最大值!");
-
sql = "update user set money=money+10 where id=2";
- st.executeUpdate(sql);
-
- conn.commit();
-
} catch (RuntimeException e) {
-
if (conn != null && sp != null) {
-
- conn.rollback(sp);
- conn.commit();
- }
-
throw e;
-
} catch (SQLException e) {
-
if (conn != null)
- conn.rollback();
-
throw e;
-
} finally {
- JdbcUtils.free(rs, st, conn);
- }
- }
-
总结:
1).如果上面的调用产生了异常,那么张三账号的会减少,而王五的钱不会变少:保存点之后的内容会被回滚,而保存点之前的内容不会被回滚。
2).事务的回滚也可以不回滚所有的操作,比如一件事需要三步完成,我们可以在走完第一步后设置一个保存点,然后再进行第二步和第三步,一旦发生异常,回滚到保存点即可,此时保存点以后的操作会回滚,而保存点以前的不会(未完全回滚)。
备注:.在MySql数据库使用过程中如果发现某个数据库对事务的支持不是很好(比如不能提交或不能回滚),则很可能是数据库的引擎使用不合适(数据库引擎有很多种,比如InnoDB,MyIsam,其中InnoDB支持数据库事务,而MyIsam不支持)
3、JTA分布式事务的简要介绍
跨越多个数据源的事务,使用JTA容器实现事务。
分成两阶段提交。
- javax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName");
- tx.begin();
-
-
tx.commit();
备注:要想实现JTA事务需要JTA容器(Tomcat没有,Weblogic,Websphere有)的支持,JTA容器就行一个指挥官,指挥着所有的数据库(一般发2道指令),他会先发出一个提交的请求给所以数据库,如果此时有数据库表示要回滚,则容器会通知其他数据库一起回滚,如果没有数据库提出回滚,此时发第二道命令,所有数据库一起提交。
4、事务的隔离级别
查看与设置mysql数据库的的隔离级别:
查看:select @@tx_isolation
未提交读:set transaction isolation level read uncommitted
提交读:set transaction isolation level read committed
不可重复读:set transaction isolation level repeatable committed
在默认情况下mysql的事务是自动提交的,输入命令strat transaction 表示你要
自己手动控制事务,mysql不会帮你自动提交事务 commit命令是提交当前事务
rollback:回滚事务
特别说明:本人转载文章纯为技术学习,总结经验,并无其他目的,若有他人继续转载,请链接原作者的地址,而不是本文的地址,以示对作者的尊重。最后对原作者的辛勤劳动表示感谢!
分享到:
相关推荐
传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|load|persist方法 05_实体对象的三种状态...
【描述】中提到的"传智播客视频"是一系列教学视频,这些视频可能涵盖了JDBC的基础知识,如数据库连接、SQL语句的执行、结果集的处理、事务管理、批处理等。李勇老师的讲解风格深入浅出,适合初学者入门,通过他的...
传智播客-Jdbc-李勇.ppt 传智播客-Jdbc-李勇.ppt 传智播客-Jdbc-李勇.ppt
【传智播客李勇hibernate PPT】是一份由知名教育机构传智播客推出的关于Hibernate框架的培训资料,由讲师李勇精心制作。这份PPT详细讲解了Hibernate在实际开发中的应用,旨在帮助学员深入理解并掌握这一强大的Java...
传智播客_hibernate李勇笔记是在学习李勇老师讲的hibernate3.2.5后整理的笔记
hibernate_传智播客_李勇
【传智播客李勇hibernate】课程详解了ORM框架Hibernate的核心概念和技术,适合初学者和想要深入了解Hibernate的开发者。以下是对课程内容的详细解析: 1. **引入ORM框架**: - 阻抗不匹配:由于Java是面向对象的...
传智播客hibernate讲解视频配套ppt,李勇
【传智播客 李勇 Hibernate 讲解】 在IT领域,ORM(Object-Relational Mapping,对象关系映射)框架是将面向对象的模型与关系数据库之间进行映射的关键技术,有效地解决了“模型不匹配”(也称为“阻抗不匹配”)的...
本资源“传智播客JDBC_所有源码与ppt”是针对JDBC学习的一个综合包,包含了源代码和相关的教学演示PPT,非常适合初学者或希望深入理解JDBC的开发者使用。传智播客是一家知名的教育机构,其课程内容通常具有系统性和...
**JDBC笔记 李勇** JDBC(Java Database Connectivity)是Java编程语言中用来规范应用程序如何访问数据库的应用程序编程接口,提供了诸如连接数据库、发送SQL语句、处理结果集等功能。李勇老师的JDBC学习笔记主要...
传智播客 hibernate PPT 很经典
- **传智播客李勇hibernate**:李勇老师的Hibernate课程可能包括了Hibernate的基本原理、实体类与表的映射、CRUD操作、查询语言(HQL)、Criteria查询、级联操作、缓存策略等。他可能强调了如何优雅地处理数据库操作...
在IT行业中,SSH三大框架是Java Web开发领域中不可或缺的一部分...这些PPT资源,如"传智播客李勇hibernate.ppt"、"spring.ppt"、"struts2.ppt",提供了详细的讲解和示例,对学习SSH框架的开发者来说是一份宝贵的资料。
- **JDBC**:数据库连接,SQL操作,事务处理。 - **MVC框架**:如Struts、Spring MVC,理解模型-视图-控制器架构。 - **JavaMail**:学习发送和接收电子邮件的API。 4. **Spring框架** - **依赖注入**:理解IoC...