conn.setAutoCommit()实现事务的控制用法及作用

事务操作数据:
1.为什么要引入事务

假如银行转账系统

从张三的账户转1000元到小罗的账户

这个操作需要分两步

1.张三账户减少1000元

2.小罗账户增加1000元

假如于到断电等等,而刚好张三减了1000,而此时小罗却不增加。。。。可以想象银行这下有事做了

所以使用事务操作数据来搞定

2.实现事务的原理

java使用事务非常简单,首先调用conn.setAutoCommit(boolean b)方法,传入一个false,这样将不会自动提交,而需要使用conn.commit()方法,手动提交事务,当然只有在确认两个步骤都没有出错的情况下,才能提交,这样才能保证整个操作的完整性,一旦出错,使用conn.rollback()方法,回滚事务,这样的话,整个事务都将不被提交。那么如何判断有没有出错呢,非常简单,执行数据库操作的方法,都会抛出java.sql.SQLException,所以需要使用try......catch语句块捕获异常,在catch块中,使用conn.rollback()回滚事务即可

在数据库调用的javabean中conn.setAutoCommit()的功能是每执行一条SQL语句,就作为一次事务提交。但一般在项目中很有可能需要执行多条SQL语句作为一个事务。若有一个执行不成功,就会rollback();

一般来讲,大家对数据库中的表单,主要是增、删、改、查 这四个操作,如果你的程序当中,遇到一次业务逻辑需要两次或两次以上的对相同数据表的增删改操作,那么,为了数据的一致性,(或者具体说,在你的一次业务逻辑的处理过程中,其他(线程或程序或业务处理)的对相同数据的相同两次查询所得结果相同。)我们会利用数据库的事务操作,将一次业务逻辑所包含的所有操作封装在一个事务里,一次将多个操作进行提交。

而conn的setAutoCommit方法,是指,在事务当中,是否执行一条语句就自动提交一次。

想在一个事务里进行多个操作。就必然将setAutoCommit的参数设置成false,在多个操作的最后调用conn.commit()方法,进行手动提交

3.参数:true和false

假设如下:

1 数据库一个表格有50条记录

2 你设置参数为false

则在你执行整个查询SQL期间,一直是没有事务的,那么如果你的查询用到了一些函数,这些函数包含了多个查询语句,那么有可能会出现不一致的情况。

也就是说,函数、存储过程等,他们都将运行在非事务的环境下。

而你设置为true,则没有任何问题了,读一致性将保证不会出现问题。

相关推荐
运维行者_3 小时前
企业无线网络监控的挑战与智能化演进趋势
大数据·运维·服务器·网络·数据库
国强_dev3 小时前
技术探讨:使用 stunnel 加密转发数据库连接时,如何获取客户端真实 IP?
数据库·网络协议·tcp/ip
@insist1233 小时前
系统规划与管理师-信息系统规划核心工作要点解析
数据库·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
超级数据查看器4 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
数安3000天4 小时前
增量数据如何自动分类分级,避免目录“过期“?
大数据·数据库
南墙上的石头5 小时前
麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)
数据库·mysql
画中有画6 小时前
论向量数据库在项目中的应用
数据库
spider_xcxc6 小时前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
l1t7 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb
执子手 吹散苍茫茫烟波7 小时前
RC 隔离级别下 MySQL InnoDB 死锁典型案例
数据库·mysql