@Testpublic void testSaveMoney(){Connection conn =null;PreparedStatement pstmt = null;String accountId="123456789";double money  =100;ResultSet rs = null;String sql = "Insert into inaccount (accountid,inbalance) values(?,?)";try {conn = DBUtil.getCon();pstmt = conn.prepareStatement(sql);pstmt.setString(1, accountId);pstmt.setDouble(2, money);pstmt.executeUpdate();sql = "update account set balance=balance+? where accountid=?";pstmt = conn.prepareStatement(sql);pstmt.setDouble(1, money);pstmt.setString(2, accountId);boolean flag = true;if(flag){throw new SQLException("因网络或不明原因出异常!");}pstmt.executeUpdate();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{DBUtil.close(conn, pstmt, rs);}}

如果不使用事务操作,对于一个银行业务来说是致命的,上面的这个示例,造成的结果就是一个inaccount表中会插入一条数据,而account表中没有任何改变。

事务的类型:

自动提交:执行update马上保存数据

手动提交:执行update不保存数据,先放入缓存,只有执行Commit,才保存

设置事务:


@Testpublic void testSaveMoney(){Connection conn =null;PreparedStatement pstmt = null;String accountId="123456789";double money  =100;ResultSet rs = null;String sql = "Insert into inaccount (accountid,inbalance) values(?,?)";try {conn = DBUtil.getCon();conn.setAutoCommit(false);pstmt = conn.prepareStatement(sql);pstmt.setString(1, accountId);pstmt.setDouble(2, money);pstmt.executeUpdate();sql = "update account set balance=balance+? where accountid=?";pstmt = conn.prepareStatement(sql);pstmt.setDouble(1, money);pstmt.setString(2, accountId);boolean flag = true;if(flag){throw new SQLException("因网络或不明原因出异常!");}pstmt.executeUpdate();//提交事务} catch (Exception e) {// TODO Auto-generated catch block//回滚事务,回滚到conn.setAutoCommit(false);try {conn.rollback();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}e.printStackTrace();}finally{DBUtil.close(conn, pstmt, rs);}}

在事务没有提交之前,数据时先放到缓存中的,但是事务提交时会将数据保存到表中并清空缓存,rollback的原理也是清空缓存这样就不会出现上面的问题

DBUtils事务处理相关推荐

  1. DBUtils 笔记

    一.DBUtils介绍  apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...

  2. DBUtils (30)

    DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. Dbutils三个核心功能介绍 一.  QueryRunn ...

  3. DBUtils、连接池

    1.DBUtils 它是JDBC的简化开发工具包 需项目导入commons-dbutils-1.6.jar 3个核心功能: QuerryRunner:提供对SQL语句操作的API ResultSetH ...

  4. 数据库3(DBUtils)

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类* a: 概述* DBUtils是java编程中的数据库操作实用工具,小巧简单实用.* DBUtils封装了 ...

  5. MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用

    DBUtils简介: commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作 ...

  6. mysql连接池_数据库技术:数据库连接池,Commons DbUtils,批处理,元数据

    Database Connection Pool Introduction to Database Connection Pool 实际开发中"获得连接"或"释放资源&q ...

  7. [Day30] DBUtils和连接池

    1. DBUtils-JDBC的简化开发工具包 1.1 概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 ...

  8. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...

  9. 30_java之DButils工具类

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类* a: 概述* DBUtils是java编程中的数据库操作实用工具,小巧简单实用.* DBUtils封装了 ...

最新文章

  1. python代码获取今天、昨天、明天的日期
  2. Altium Designer原理图和PCB中对元件垂直、水平镜像翻转
  3. 详解.Net中变量的命名和属性
  4. 【JETSON-NANO】SD卡系统备份克隆
  5. 演讲 | 微软亚洲研究院刘铁岩:对偶学习推动人工智能的新浪潮
  6. redis集群的几种模式
  7. qtextedit 默认文案_QT中常用的控件说明.md
  8. html下拉框换行,HTML列表框换行文本
  9. JDK Unsafe类的使用与CAS原子特性
  10. 《Java编程思想》第四版读书笔记 第四章
  11. Xcode常见的编译、运行等错误的解决
  12. 安装的python没有菜单栏_由非root用户安装python包/工具
  13. es6 实例:模块的 Singleton 模式
  14. 和信虚拟终端的全面部署-虚拟终端网络工程实施
  15. Flex代码整理插件——FlexPrettyPrintCommand
  16. 解决PyCharm调试查看变量时一直显示collecting data
  17. windows7/windows server 2008 r2升级至sp1
  18. cousera-usable security
  19. 西游记中文殊菩萨的坐骑青狮两次下界为妖
  20. 转:心理学相关经典书籍

热门文章

  1. 计算机编程术语. dsp,什么是数字信号处理器(DSP)
  2. MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法
  3. MySQL锁的用法之行级锁
  4. linux php7 安装redis扩展(php7可以使用自测)
  5. android view超出屏幕_Android APP界面保持屏幕常亮方法
  6. php后台富文本编辑器的内容调用到前端小程序页面的一些显示问题,如:nbsp;
  7. mysql group by 集合_MySQL高级查询之与Group By集合使用介绍
  8. 嵌入式 linux restful,嵌入式 RESTful 框架 express.java
  9. c 和 java 差异_java和C/C++的差异是什么
  10. mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)