DBUtils事务处理
@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事务处理相关推荐
- DBUtils 笔记
一.DBUtils介绍 apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...
- DBUtils (30)
DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. Dbutils三个核心功能介绍 一. QueryRunn ...
- DBUtils、连接池
1.DBUtils 它是JDBC的简化开发工具包 需项目导入commons-dbutils-1.6.jar 3个核心功能: QuerryRunner:提供对SQL语句操作的API ResultSetH ...
- 数据库3(DBUtils)
01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类* a: 概述* DBUtils是java编程中的数据库操作实用工具,小巧简单实用.* DBUtils封装了 ...
- MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
DBUtils简介: commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作 ...
- mysql连接池_数据库技术:数据库连接池,Commons DbUtils,批处理,元数据
Database Connection Pool Introduction to Database Connection Pool 实际开发中"获得连接"或"释放资源&q ...
- [Day30] DBUtils和连接池
1. DBUtils-JDBC的简化开发工具包 1.1 概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 ...
- JDBC连接池和DBUtils
本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...
- 30_java之DButils工具类
01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类* a: 概述* DBUtils是java编程中的数据库操作实用工具,小巧简单实用.* DBUtils封装了 ...
最新文章
- python代码获取今天、昨天、明天的日期
- Altium Designer原理图和PCB中对元件垂直、水平镜像翻转
- 详解.Net中变量的命名和属性
- 【JETSON-NANO】SD卡系统备份克隆
- 演讲 | 微软亚洲研究院刘铁岩:对偶学习推动人工智能的新浪潮
- redis集群的几种模式
- qtextedit 默认文案_QT中常用的控件说明.md
- html下拉框换行,HTML列表框换行文本
- JDK Unsafe类的使用与CAS原子特性
- 《Java编程思想》第四版读书笔记 第四章
- Xcode常见的编译、运行等错误的解决
- 安装的python没有菜单栏_由非root用户安装python包/工具
- es6 实例:模块的 Singleton 模式
- 和信虚拟终端的全面部署-虚拟终端网络工程实施
- Flex代码整理插件——FlexPrettyPrintCommand
- 解决PyCharm调试查看变量时一直显示collecting data
- windows7/windows server 2008 r2升级至sp1
- cousera-usable security
- 西游记中文殊菩萨的坐骑青狮两次下界为妖
- 转:心理学相关经典书籍
热门文章
- 计算机编程术语. dsp,什么是数字信号处理器(DSP)
- MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法
- MySQL锁的用法之行级锁
- linux php7 安装redis扩展(php7可以使用自测)
- android view超出屏幕_Android APP界面保持屏幕常亮方法
- php后台富文本编辑器的内容调用到前端小程序页面的一些显示问题,如:nbsp;
- mysql group by 集合_MySQL高级查询之与Group By集合使用介绍
- 嵌入式 linux restful,嵌入式 RESTful 框架 express.java
- c 和 java 差异_java和C/C++的差异是什么
- mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)