现在我们要做一个转账系统。

第一章:创建一张新的表格(用户银行账户表格)

在之前的JDBC_01数据库中新增一个表格,名字为:Account

  其中,有id、银行卡号、银行密码、账户余额。

创建表格代码:

create table account (id int not null auto_increment,username varchar(45),password varchar(45),money int,primary key(id));

创建好后,使用命令desc account;查看表格结构。

接下来,添加两个银行账户,那么就创建小猪和小牛两个人吧。

insert into account(username,password,money) values('小猪','123456',1000);

insert into account(username,password,money) values('小牛','654321',5000);

小猪有1000块钱,小牛有5000

好了,回到IDEA。

第二章:创建基本的转账功能

创建两个执行语句,一个是扣钱,一个是加钱。

public static boolean transform(String name1,String name2,int money){
Connection con = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
ResultSet rs = null;
try {
con = JDBCUtils.getConnection(); String sql = "update account set money = money-? where username = ?";
pstmt1 = con.prepareStatement(sql); pstmt1.setInt(1, money);
pstmt1.setString(2, name1); pstmt1.executeUpdate();//返回影响的行数 sql = "update account set money = money+? where username = ?";
pstmt2 = con.prepareStatement(sql); pstmt2.setInt(1, money);
pstmt2.setString(2, name2); pstmt2.executeUpdate();//返回影响的行数 return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(con, pstmt, rs);
}
return false;
}

转账代码在main中调用:

transform("小猪","小牛",100);

转账前:

转账后:

第三章:为什么要创建事务操作

在转账的过程中,有可能系统会发生错误,断电等等,

这样就有可能导致转钱的人的钱扣了,但是后面的代码就没有执行了,这样收款方就收不到钱了。

比如我们:

空指针错误(随便举的一个例子)

这样就导致小猪少了一百,但是小牛却没有进账。

第四章:使用事务功能Commit

事务操作,简单的说,

就是把一大堆需要一起执行的SQL语句打包好,再一起发送到数据库中。

这样就不会出现上面所说的,

前一条SQL语句发过去数据库了,但因为Java程序死机了,导致后面一个紧跟着的SQL语句没发过去。

使用方法:

在关键的代码(需要一起执行的SQL语句)前添加

con.setAutoCommit(false);

//关键代码,如转账

con.commit();

现在转账代码即:

public static boolean transform(String name1,String name2,int money){
Connection con = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
ResultSet rs = null;
try {
con = JDBCUtils.getConnection(); con.setAutoCommit(false); String sql = "update account set money = money-? where username = ?";
pstmt1 = con.prepareStatement(sql); pstmt1.setInt(1, money);
pstmt1.setString(2, name1); pstmt1.executeUpdate();//返回影响的行数 //上面代码已经扣钱了
//在这里发生了一些意外
String a = null;
a.charAt(2);
//抛出空指针错误
//下面代码就不执行了 sql = "update account set money = money+? where username = ?";
pstmt2 = con.prepareStatement(sql); pstmt2.setInt(1, money);
pstmt2.setString(2, name2); pstmt2.executeUpdate();//返回影响的行数 con.commit(); return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(con, pstmt1, rs);
}
return false;
}

我们再执行转账。

即使程序依旧报出空指针错误,但是钱的问题不会发生了。

【JDBC】学习路径7-转账-commit事务操作的更多相关文章

  1. SSM(spring mvc+spring+mybatis)学习路径——1-2、spring事务管理

    目录 1-2 Spring事务管理 概念介绍 事务回顾 事务的API介绍 Spring 事务管理 转账案例 编程式事务管理 声明式事务管理 使用XML配置声明式事务 基于tx/aop 使用注解配置声明 ...

  2. Java -- JDBC 学习--通过Statement进行数据库更新操作

    通过 JDBC 向指定的数据表中插入一条记录. 1. Statement: 用于执行 SQL 语句的对象 1). 通过 Connection 的 createStatement() 方法来获取 2). ...

  3. 使用JDBC进行数据库的事务操作(2)

    本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...

  4. 使用JDBC进行数据库的事务操作(1)

    本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作.下一篇会讲述如何使用JDBC进行数据库的事务操作. 事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑 ...

  5. spring学习(三) ———— spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  6. JDBC 学习笔记(十一)—— JDBC 的事务支持

    1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...

  7. JDBC 学习笔记(二)—— 大数据+存储过程+批处理+事务管理

    本文目录:       1.使用JDBC处理大数据        2.使用JDBC处理大文本        3.使用JDBC处理二进制数据        4.Oracle中大数据处理        5 ...

  8. Java框架spring学习笔记(十七):事务操作

    事务操作创建service和dao类,完成注入关系 service层叫业务逻辑层 dao层单纯对数据库操作层,在dao层不添加业务 假设现在有一个转账的需求,狗蛋有10000元,建国有20000元,狗 ...

  9. Java -- JDBC 学习--事务

    数据库事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个 ...

随机推荐

  1. Tomcat部署界面使用burp爆破

    打开界面显示私密连接,正常抓包. 抓包查看Authorization的数据 Basic 后面的数据是经过base64加密后的.格式为admin:123456 勾选对应参数,payload设置为Cust ...

  2. DotNET程序员面向API编程的正确姿势

    原文:https://blog.csdn.net/u013201439/article/details/49981071 补充:按照步骤成功加载文档后,选择索引可以快速发现相关的内容,如图

  3. RPA供应链管制单修改机器人

    背景:供应链环节中,研发物料时而因为市场缺货等原因无法采购,资材部需登入系统修改物料管制单. 操作流程:登录PDM系统中读取数据.登录ERP系统中更新数据. 人工操作:每日耗时3.5小时,出现一定比例 ...

  4. python小题目练习(二)

    题目:输出1-100之间不包括7的倍数,含有7的数的其他数 """Author:mllContent:输出1-100之间不包括7的倍数,含有7的数的其他数Date:202 ...

  5. Python教程——常用的os操作详情

    Python自动的os库是和操作系统交互的库,常用的操作包括文件/目录操作,路径操作,环境变量操作和执行系统命令等. 文件/目录操作 获取当前目录(pwd): os.getcwd() 切换目录(cd) ...

  6. Codeforces Round #790 (Div. 4) A-H

    Codeforces Round #790 (Div. 4) A-H A 题目 https://codeforces.com/contest/1676/problem/A 题解 思路 知识点:模拟. ...

  7. 游戏启动后提示安装HMS Core,点击取消,未再次提示安装HMS Core(初始化失败返回907135003)

    问题描述 我们国内的华为联运游戏集成华为游戏服务SDK 之后,被审核驳回:在未安装或需要更新华为移动服务(HMS Core)的手机上,提示安装华为移动服务,点击取消,未再次提示安装HMS Core. ...

  8. Visdom

    安装visdom pip install visdom 启动visdom服务 python -m visdom.server visdom绘制各种图形: visdom属性介绍: 实例: from vi ...

  9. Java方法的重写

    package Demo.oop.APP.Demo04; //启动器 public class application { public static void main(String[] args) ...

  10. java的elasticsearch做高亮显示

    import org.apache.commons.lang3.reflect.FieldUtils;import org.elasticsearch.action.search.SearchResp ...