银行转账java mysql_一个银行转账业务模型分析:大魏Java记5-7

本文详细分析了银行转账业务中的事务处理,介绍了事务处理的基本概念和数据库视角的理解。通过Java JDBC展示了如何操作数据库,包括JDBC的批处理、事务处理,并对比了集中式事务与分布式事务的本质差异。此外,还探讨了数据库连接池技术,如DBCP和C3P0的使用,以及Apache DBUtils工具类在事务处理中的作用。

4bb11fb8ddaadfe7212cb68cd7d65f17.png

银行转账业务是一个典型的事务,我们先介绍基本概念,这样后面的代码看起来就比较容易理解了。

一、事务处理

“事务处理”这个名字的概念,相信大多数朋友都有所了解。我们看一下维基百科中关于“事务处理”的定义:

“在计算机科学中,事务是无法被分割的操作,事务处理就是被分割为个体的信息处理。事务必须作为一个完整的单元成功或失败,不可能存在部分完成的事务。”

看着是不是有点绕?

好,我们换个视角看“事务处理”,从数据库视角。

在数据库操作中,事务是由一条或者多条SQL语句组成的一个工作单元。只有当事中的所有操作都正常完成,整个事务才被提交到数据库,如果意向操作没有完成,则整个事务被撤销。

例如zhangsan给lisi转200元钱,对应的SQL是;

UPDATE ACCOUNT set MONEY=MONEY-200 WHERE NAME='zhangsan';

UPDATE ACCOUNT set MONEY=MONEY+200 WHERE NAME='lisi';

转钱这件事,就是一个事务处理。所以,事务是以数据为核心的,而数据是存在关系型数据库上的。因此,应用如何操作数据库就成为事务处理中的关键。

Java应用操作数据库的模块是JDBC。

二、JDBC

JBDC的全称为:Java Database Connectivity,是一套用于执行SQL语句的Java API。应用程序可以通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库的查询、更新、删除工作。

我们先看一下JDBC API的内容。

在下面的三色框中,中间部分是JDBC常用的API。

第一部分是DataSource接口的实现;

第三名部分是DBUtils工具库;

JDBC的实现细节如下图所示,包含三大部分:

(1)JDBC驱动管理器:负责注册特定的JDBC驱动器,通过java.sql.DeviceManager类实现。

(2)Java驱动器API;其中最主要的接口是:java.sql.Driver接口。

(3)JDBC驱动器:一种数据库驱动,由数据库厂商创建。JDBC启动器实现了JDBC驱动器API,负责与特定的数据库链接,以及处理通信细节。

一个完整的JDBC分为六大步骤:通过DriverManager加载并注册DB驱动

通过DeiverManager获取数据库连接(DB connection)

通过Connection对象获取Statement对象。

使用Statement执行SQL语句,生成结果集ResultSet。

操作结果集,取出结果。

释放数据库资源

需要注意的是:由于Driver类的源码中,已经在静态代码块中完成了数据库驱动的注册,所有为了避免数据库驱动被重复注册,主要在程序中加载驱动类即可。

下面我们查看一个完成的JDBC示例。下图中的标号,就对应上文的6个步骤。我们看到第六步释放了Statement和Connection资源。

0cd58f0b245fb9330265e596a4755166.png

eda5dd6bdb713ab0d1802428207a50e7.png

三、JDBC批处理

在实际开发中,经常需要向数据库发送多条SQL语句。这时如果逐条执行这些SQL语句,效率会很低。为此,JDBC提供了批处理机制,可以同时执行多条SQL语句。Statement和PreparedStatement都实现了批处理。

PreparedStatement是Statement的一个子类。PreparedStatement对象可以对SQL语句进行预编译。当相同的SQL语句再次执行时,数据库只需使用缓冲区的数据,而不需要对SQL语句再次编译,从而有效提高了数据的访问效率。

我们查看Statement加载和执行批处理的代码,如下图红框所示:

我们再看通过PreparedStatement加载和执行批处理的代码:

很明显,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值