JDBC入门九:JDBC实现事务(十分重要!!!)

事务。MySQL事务是对于更新(插入,修改,删除)来说的,查询好像没有事务不事务一说。

目录

一:JDBC事务介绍 

1.事务及事务区:

(1)【commit提交】

(2)【rollback回滚】

2.JDBC两种事务模式:​

(1)自动提交事务模式:

(2)手动提交事务模式:

二:事务案例

1.没有使用【手动提交事务】模式时

(1)TransactionSample类编写

(2)运行结果 

(3)原因分析

2.使用【手动提交事务】模式时

(1)TransactionSample类编写(出错的时候)

(2)运行结果:(出错的时候)

(3)程序没有出错,正常执行


一:JDBC事务介绍 

MySQL之所以能在实际中使用,就是因为其有事务机制。MySQL,Oracle这样的关系型数据库都是支持事务的;也有很多小众的数据库是不支持事务的。

1.事务及事务区:

(1)【commit提交】

● 应用程序在写入数据时,并不是直接把数据放入到表中,而是先把数据放在事务区中;

● 事务区是MySQL自带的;如果数据很小的时候,事务区中的数据放在内存中,以加快处理速度;如果数据比较大的时候,其会用一块硬盘空间作为事务缓冲;

以A借给B100元为例:

       首先,程序对A的余额作了减法操作,这是一个写操作,但是其不会直接反映到数据表中,而是先把这个操作的中间结果放在事务区中;

       然后,程序对B的余额作了加法的操作,同样会把处理的中间结果放在事务区中

       最后,当程序对这两个更新操作全部执行完以后,会主动的向MySQL发起一个commit提交的命令,这个commit提交命令会直接作用到MySQL事务区上;当MySQL看到程序进行commit事务提交后,于是MySQL的事务区会将刚才的加和减两个操作一次性的写入到数据表中;

        即,进行程序的写操作的时候,两次的记录更新都是面向事务区的;只有当进行commit提交的时候,才由事务区真正的反映到数据表中(啰嗦一下:对于真正写入到数据表中的操作叫做“commit提交”);

        当提交成功后,事务区中的数据的数据就没有意义了,由MySQL自动的把这个事务区清空,等待下一次应用程序再向事务区中进行新数据的写入。

……………………………………………………

(2)【rollback回滚】

以A借给B100元为例:

        程序【对A的余额作了减法操作】操作正常;但是,由于某种原因程序【对B的余额作了加法的操作】的时候,程序报错了;那么JDBC的应用程序会向事务区发起一个【rollback回滚命令】;MySQL收到了这个回滚命令以后,其会直接将在事务区中原本已经处理好的【对A的余额作了减法操作】给清空;

        即程序一旦向MySQL提交了【rollback回滚命令】以后,无论之前做了多少数据的前置处理,MySQL都会直接将事务区清空,最终的数据表中不会产生任何实质的写入操作;

事务总结一句话:作为事务来说,要么一次性全部完成;要么将之前所有已经做的事情通过回滚全部撤销。

实际的Java代码,主要是通过控制【commit提交】和【rollback回滚】命令的时机,只有应用程序发起了这样的命令,MySQL才可以执行对应的操作。

……………………………………………………

2.JDBC两种事务模式:

(1)自动提交事务模式:

自动提交事务模式是JDBC的默认模式。在每一次执行写操作(新增、修改、删除)的时候,每完成一次SQL语句都会自动的提交事务;

如果在程序中没有显式的写【conn.setAu

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值