`
hl756799782
  • 浏览: 77736 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

传智播客李勇Jdbc视频笔记--事务(转载)

阅读更多

原文链接:http://longdechuanren.iteye.com/blog/632403

 

1、事务的概念与JDBC事务处理
(1)原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
(2)一致性(consistency):在事务处理执行前后,数据库是一致的(两个账户要么都变,或者都不变)。
(3)隔离性(isolcation):一个事务处理对另一个事务处理没有影响。
(4)持续性(durability):事务处理的效果能够被永久保存下来 。
举例:银行转账
connection.setAutoCommit(false);//打开事务。
.....
....把进行转账的两步操作放在同一个事务中,如果一个出现异常,马上回滚
.....
connection.commit();//提交事务。
connection.rollback();//回滚事务。

2、事务的保存点处理:定义保存点可以用来回滚一部分内容

Java代码 复制代码 收藏代码
  1. static void test() throws SQLException {   
  2.         Connection conn = null;   
  3.         Statement st = null;   
  4.         ResultSet rs = null;   
  5.         //定义保存点   
  6.         Savepoint sp = null;   
  7.         try {   
  8.             conn = JdbcUtils.getConnection();   
  9.             conn.setAutoCommit(false);             
  10.             st = conn.createStatement();   
  11.             //修改张三的money值   
  12.             String sql = "update user set money=money-10 where id=1";   
  13.             st.executeUpdate(sql);   
  14.             //设置保存点   
  15.             sp = conn.setSavepoint();   
  16.                
  17.             //修改王五的money值   
  18.             sql = "update user set money=money-10 where id=3";   
  19.             st.executeUpdate(sql);   
  20.   
  21.             sql = "select money from user where id=2";   
  22.             rs = st.executeQuery(sql);   
  23.             float money = 0.0f;   
  24.             if (rs.next()) {   
  25.                 money = rs.getFloat("money");   
  26.             }   
  27.             //如果李四的money的值>300就抛出异常   
  28.             if (money > 300)   
  29.                 throw new RuntimeException("已经超过最大值!");   
  30.             sql = "update user set money=money+10 where id=2";   
  31.             st.executeUpdate(sql);   
  32.   
  33.             conn.commit();   
  34.         } catch (RuntimeException e) {   
  35.             if (conn != null && sp != null) {   
  36.             //rollback的时候要定义保存点,否则会全部回滚   
  37.                 conn.rollback(sp);   
  38.                 conn.commit();   
  39.             }   
  40.             throw e;   
  41.         } catch (SQLException e) {   
  42.             if (conn != null)   
  43.                 conn.rollback();   
  44.             throw e;   
  45.         } finally {   
  46.             JdbcUtils.free(rs, st, conn);   
  47.         }   
  48.     }   
  49.       


总结:

1).如果上面的调用产生了异常,那么张三账号的会减少,而王五的钱不会变少:保存点之后的内容会被回滚,而保存点之前的内容不会被回滚。

2).事务的回滚也可以不回滚所有的操作,比如一件事需要三步完成,我们可以在走完第一步后设置一个保存点,然后再进行第二步和第三步,一旦发生异常,回滚到保存点即可,此时保存点以后的操作会回滚,而保存点以前的不会(未完全回滚)。 

 

备注:.在MySql数据库使用过程中如果发现某个数据库对事务的支持不是很好(比如不能提交或不能回滚),则很可能是数据库的引擎使用不合适(数据库引擎有很多种,比如InnoDB,MyIsam,其中InnoDB支持数据库事务,而MyIsam不支持)


3、JTA分布式事务的简要介绍
跨越多个数据源的事务,使用JTA容器实现事务。
分成两阶段提交。

Java代码 复制代码 收藏代码
  1. javax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName");   
  2.     tx.begin();   
  3.     //connection1 connection2 (可能来自不同的数据库)…    
  4.     tx.commit();//tx.rollback();  

 

备注:要想实现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课

    传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|load|persist方法 05_实体对象的三种状态...

    传智播客 李勇老师 JDBC代码全部和ppt

    【描述】中提到的"传智播客视频"是一系列教学视频,这些视频可能涵盖了JDBC的基础知识,如数据库连接、SQL语句的执行、结果集的处理、事务管理、批处理等。李勇老师的讲解风格深入浅出,适合初学者入门,通过他的...

    传智播客-Jdbc-李勇.ppt

    传智播客-Jdbc-李勇.ppt 传智播客-Jdbc-李勇.ppt 传智播客-Jdbc-李勇.ppt

    传智播客李勇hibernate PPT

    【传智播客李勇hibernate PPT】是一份由知名教育机构传智播客推出的关于Hibernate框架的培训资料,由讲师李勇精心制作。这份PPT详细讲解了Hibernate在实际开发中的应用,旨在帮助学员深入理解并掌握这一强大的Java...

    传智播客_hibernate李勇笔记

    传智播客_hibernate李勇笔记是在学习李勇老师讲的hibernate3.2.5后整理的笔记

    hibernate_传智播客_李勇

    hibernate_传智播客_李勇

    传智播客李勇hibernate

    【传智播客李勇hibernate】课程详解了ORM框架Hibernate的核心概念和技术,适合初学者和想要深入了解Hibernate的开发者。以下是对课程内容的详细解析: 1. **引入ORM框架**: - 阻抗不匹配:由于Java是面向对象的...

    hibernate传智播客李勇ppt

    传智播客hibernate讲解视频配套ppt,李勇

    传智播客 李勇 hibernate 的ppt

    【传智播客 李勇 Hibernate 讲解】 在IT领域,ORM(Object-Relational Mapping,对象关系映射)框架是将面向对象的模型与关系数据库之间进行映射的关键技术,有效地解决了“模型不匹配”(也称为“阻抗不匹配”)的...

    传智播客JDBC_所有源码与ppt

    本资源“传智播客JDBC_所有源码与ppt”是针对JDBC学习的一个综合包,包含了源代码和相关的教学演示PPT,非常适合初学者或希望深入理解JDBC的开发者使用。传智播客是一家知名的教育机构,其课程内容通常具有系统性和...

    JDBC笔记 李勇

    **JDBC笔记 李勇** JDBC(Java Database Connectivity)是Java编程语言中用来规范应用程序如何访问数据库的应用程序编程接口,提供了诸如连接数据库、发送SQL语句、处理结果集等功能。李勇老师的JDBC学习笔记主要...

    传智播客 hibernate PPT 很经典

    传智播客 hibernate PPT 很经典

    传智播客SSHppt

    - **传智播客李勇hibernate**:李勇老师的Hibernate课程可能包括了Hibernate的基本原理、实体类与表的映射、CRUD操作、查询语言(HQL)、Criteria查询、级联操作、缓存策略等。他可能强调了如何优雅地处理数据库操作...

    传智播客SSH三大框架的PPT

    在IT行业中,SSH三大框架是Java Web开发领域中不可或缺的一部分...这些PPT资源,如"传智播客李勇hibernate.ppt"、"spring.ppt"、"struts2.ppt",提供了详细的讲解和示例,对学习SSH框架的开发者来说是一份宝贵的资料。

    传智播客Java培训ppt大全

    - **JDBC**:数据库连接,SQL操作,事务处理。 - **MVC框架**:如Struts、Spring MVC,理解模型-视图-控制器架构。 - **JavaMail**:学习发送和接收电子邮件的API。 4. **Spring框架** - **依赖注入**:理解IoC...

Global site tag (gtag.js) - Google Analytics