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硬编码方式模拟银行转账。相关推荐

  1. python采用哪种编码方式_Python编码格式的指定方式

    参考自: http://python.jobbole.com/85852/, 原文探究的更深,有兴趣的可以去看看. 简介来讲就是使用一种特殊的注释来声明编码格式,如何判断这种格式也用了很简单粗暴有效的 ...

  2. NVIDIA硬编码方式:omxh264enc和nvv4l2h264enc

    在jetson nano上进行测试两种编码方式性能对比:

  3. python采用哪种编码方式_python有哪几种编码方式

    python编码方式有:1.ASCII:2.GB2312:3.Unicode:4.UTF-8.ASCII编码的制定是为了显示现代美国英语.为了解决信息交流的要求,可以使用GB2312编码来进行汉语交流 ...

  4. FPGA之道(56)状态的编码方式

    文章目录 前言 状态的编码方式 binary one-hot gray johnson auto compact sequential user speed none safe mode 前言 据我说 ...

  5. python 文件编码的识别_【python】python编码方式,chardet编码识别库

    环境: python3.6 需求: 针对于打开一个文件,可以读取到文本的编码方式,根据默认的文件编码方式来获取文件,就不会出现乱码. 针对这种需求,python中有这个方式可以很好的解决: 解决策略: ...

  6. 【转】刨根究底字符编码之十三——UTF-16编码方式

    1. UTF-16编码方式源于UCS-2(Universal Character Set coded in 2 octets.2-byte Universal Character Set).而UCS- ...

  7. 【转】刨根究底字符编码之十一——UTF-8编码方式与字节序标记BOM

    一.UTF-8编码方式 1. 接下来将分别介绍Unicode字符集的三种编码方式:UTF-8.UTF-16.UTF-32.这里先介绍应用最为广泛的UTF-8. 为满足基于ASCII.面向字节的字符处理 ...

  8. HttpClient数据传输的编码方式

    约定  1. HttpClient版本:HttpClient4.1  2. 服务端中间件:tomcat7  HttpGet请求的URI编码设置  1. 问题及原因  使用HttpClient的Http ...

  9. UTF-8,UTF-16,UTF-32编码方式都是UNICODE,但只是他们的保存方式不同。

    这是转载自网络上的博文,UTF-8,UTF-16,UTF-32编码方式都是UNICODE,但只是他们的保存方式不同. Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编码.它为每种语 ...

最新文章

  1. CentOS Samba 服务器的构建(转)
  2. 从理论支撑到具体应用,万字长文详述 CV 中 Transformer 的广阔天地
  3. 将嵌套的Python字典转换为对象?
  4. mysql创建表对经常要查询的列添加索引或者组合索引
  5. 重叠I/O之事件对象通知
  6. oracle数sqlplus,sqlplus查询oracle数据库数据容量
  7. 乐观锁和悲观锁_什么是悲观锁和乐观锁?
  8. SpringBoot(12)---外部化配置(properties文件配置)
  9. Win7(64Bit) 安装 PL/SQL Developer图解
  10. Java算法常见面试题及答案
  11. Qt之QListView的简单使用(含源码+注释)
  12. 《教程》使用STLINK烧录STM32程序
  13. 没有基础的人如何自学裁缝?
  14. 定点街访辅助工具准备
  15. 嵌入式软件工程师成长---所需要看的书籍
  16. 论坛勋章动态特效制作流程
  17. 【极客时间-网络编程实战】
  18. opencv安装教程python anaconda_anaconda安装opencv(python)
  19. 疫情最大赢家现身,不是疫苗公司,是集装箱!
  20. 手机被偷完整找回方案

热门文章

  1. Ubuntu10.10源
  2. 《高性能Linux服务器构建实战》封面照出炉
  3. SpringBoot | 第三十六章:集成多CacheManager
  4. laravel-mix 使用
  5. oracle创建用户、表空间、临时表空间、分配权限步骤详解
  6. Rainmeter 一部分 语法 中文教程
  7. SqlServer int型转varchar型 出现*号
  8. 英特尔也决定了!正式退出5G智能型手机
  9. nginx 日志切割
  10. spring Java相对路径/绝对路径总结