事务的应用demo1-------采用JDBC硬编码方式模拟银行转账。
2019独角兽企业重金招聘Python工程师标准>>>
1. 数据表-----BANKACCOUNT
create table BANKACCOUNT
(id VARCHAR2(255) not null,name VARCHAR2(255) not null,balance NUMBER(10)
)
tablespace TS_USERpctfree 10initrans 1maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);
alter table BANKACCOUNTadd primary key (ID)using index tablespace TS_USERpctfree 10initrans 2maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);
2. 初始数据
3. Test2.java------------------利用事务模拟简单的"转账"情景
package com.lxh.transaction2;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.util.ConnectToDB;public class Test2 {public Connection conn = null;public Statement stat = null;public ResultSet rs = null;public static void main(String[] args) {Test2 t = new Test2();try {/*** 数据库链接操作*/Class.forName("oracle.jdbc.driver.OracleDriver");t.conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:tran", "test","123");t.stat = t.conn.createStatement();/********************** 转账 ***************************/String sql1 = "update bankaccount set balance=3000-1000 where name='lxh'";String sql2 = "update bankaccount set balance=3000+1000 where name='xiaowu'";/*** 设置非自动提交----------非常重要*/t.conn.setAutoCommit(false);// 批处理t.stat.addBatch(sql1);t.stat.addBatch(sql2);/*** 处理执行SQL的结果*/int res[] = t.stat.executeBatch();int result = 1;// 正常执行,返回结果为1for (int i : res) {result = i;}if (1 == result) {System.out.println("转账成功。。。");// 执行结果全部为1的时候执行正确,允许提交t.conn.commit();t.conn.setAutoCommit(true);} else {// 不符合逻辑,回滚事务System.out.println("转账失败。。。请核查输入参数");t.conn.rollback();}/********************** 转账 ***************************/} catch (SQLException e) {System.out.println("转账失败:\t" + e.getMessage());try {// 出现异常回滚(比如数据表名称/字段名称有误,参数有误)t.conn.rollback();t.conn.setAutoCommit(true);} catch (SQLException e1) {e1.printStackTrace();}} catch (ClassNotFoundException e) {System.out.println(e.getMessage());} finally {// 关闭资源----其实就是将资源的关闭封装成类ConnectToDB.closeResultSet(t.rs);ConnectToDB.closeStatemet(t.stat);ConnectToDB.closeConnection(t.conn);}}}
4. 运行结果
<1> 账户名不存在 ( sql2= "update bankaccount set balance=3000+1000 where name='xiaowu1'")
<2> SQL语句存在错误( sql2= "update bankaccount set balance=3000+1000 where2 name='xiaowu'")
<3> 转账信息正确( sql2= "update bankaccount set balance=3000+1000 where name='xiaowu'")
5. 结果分析
只有<3>才实现了真正类似于现实生活中的转账操作,说明"事务"在某些特定的数据库操作中的确起到了重要的作用。
6. 不足之处:转账金额和对方账户是固定的,交互性不强
升级版本:事务的应用demo2-------采用可交互的JDBC硬编码方式实现银行转账。
转载于:https://my.oschina.net/u/1989867/blog/540897
事务的应用demo1-------采用JDBC硬编码方式模拟银行转账。相关推荐
- python采用哪种编码方式_Python编码格式的指定方式
参考自: http://python.jobbole.com/85852/, 原文探究的更深,有兴趣的可以去看看. 简介来讲就是使用一种特殊的注释来声明编码格式,如何判断这种格式也用了很简单粗暴有效的 ...
- NVIDIA硬编码方式:omxh264enc和nvv4l2h264enc
在jetson nano上进行测试两种编码方式性能对比:
- python采用哪种编码方式_python有哪几种编码方式
python编码方式有:1.ASCII:2.GB2312:3.Unicode:4.UTF-8.ASCII编码的制定是为了显示现代美国英语.为了解决信息交流的要求,可以使用GB2312编码来进行汉语交流 ...
- FPGA之道(56)状态的编码方式
文章目录 前言 状态的编码方式 binary one-hot gray johnson auto compact sequential user speed none safe mode 前言 据我说 ...
- python 文件编码的识别_【python】python编码方式,chardet编码识别库
环境: python3.6 需求: 针对于打开一个文件,可以读取到文本的编码方式,根据默认的文件编码方式来获取文件,就不会出现乱码. 针对这种需求,python中有这个方式可以很好的解决: 解决策略: ...
- 【转】刨根究底字符编码之十三——UTF-16编码方式
1. UTF-16编码方式源于UCS-2(Universal Character Set coded in 2 octets.2-byte Universal Character Set).而UCS- ...
- 【转】刨根究底字符编码之十一——UTF-8编码方式与字节序标记BOM
一.UTF-8编码方式 1. 接下来将分别介绍Unicode字符集的三种编码方式:UTF-8.UTF-16.UTF-32.这里先介绍应用最为广泛的UTF-8. 为满足基于ASCII.面向字节的字符处理 ...
- HttpClient数据传输的编码方式
约定 1. HttpClient版本:HttpClient4.1 2. 服务端中间件:tomcat7 HttpGet请求的URI编码设置 1. 问题及原因 使用HttpClient的Http ...
- UTF-8,UTF-16,UTF-32编码方式都是UNICODE,但只是他们的保存方式不同。
这是转载自网络上的博文,UTF-8,UTF-16,UTF-32编码方式都是UNICODE,但只是他们的保存方式不同. Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编码.它为每种语 ...
最新文章
- CentOS Samba 服务器的构建(转)
- 从理论支撑到具体应用,万字长文详述 CV 中 Transformer 的广阔天地
- 将嵌套的Python字典转换为对象?
- mysql创建表对经常要查询的列添加索引或者组合索引
- 重叠I/O之事件对象通知
- oracle数sqlplus,sqlplus查询oracle数据库数据容量
- 乐观锁和悲观锁_什么是悲观锁和乐观锁?
- SpringBoot(12)---外部化配置(properties文件配置)
- Win7(64Bit) 安装 PL/SQL Developer图解
- Java算法常见面试题及答案
- Qt之QListView的简单使用(含源码+注释)
- 《教程》使用STLINK烧录STM32程序
- 没有基础的人如何自学裁缝?
- 定点街访辅助工具准备
- 嵌入式软件工程师成长---所需要看的书籍
- 论坛勋章动态特效制作流程
- 【极客时间-网络编程实战】
- opencv安装教程python anaconda_anaconda安装opencv(python)
- 疫情最大赢家现身,不是疫苗公司,是集装箱!
- 手机被偷完整找回方案