`
l4432848
  • 浏览: 255411 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC

    博客分类:
  • java
 
阅读更多

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

1.事务

事务与锁是关联在一起的,事务->锁

早期数据库是单机版居多,不存在访问量很大和多人同时访问的情况,因此数据安全性比较高。在现在的网络型数据库大行的时代,往往会出现同时访问的情况,这种会对数据安全性产生隐患。

写业务代码操作数据库中数据的时候,不仅仅是一条两条SQL语句的,很多条SQL语句需要按顺序来访问数据库: 比如写一个购买商品的业务:

1.添加一条数据进入订单表

2.减少商品库存

3.增加一条购买数据

4.增加一条物流需求

5.写日志数据库

或者是学生退学业务:

1.将学生表的学生信息状态改为退学

2.将学生卡状态改为暂停

3.增加一条学生的金额退还记 录 4.删除学生日常信息

5.添加学生退学记录

可见业务代码中需要执行的SQL语句是很多的,这么多SQL语句的执行只是为了完成一个业务。

这么多SQL语句,如果其中的一条SQL语句执行失败了,则这整个业务就是失败的了。

比如,如果第三条SQL执行失败了,但是第一、二条SQL语句还是执行成功了的,而第四、五条记录则执行失败,这样子的话,数据库中的数据就不是完整的了。 也就是说,我们的业务代码的SQL语句写出来,不一定是它们就能顺利执行、不一定就能保证它们能够符合业务逻辑需求,在没有接触到事务之前,这些是无法保证的。

那么事务就是用来保证如上面的那5条SQL语句能够顺利执行,能够按照你的逻辑全部正常通过。

我们写业务代码的时候,涉及到很多条SQL语句,如果我们写了20条SQL语句,但是第10条SQL语句执行不通过或者不符合业务逻辑需求,我们需要回到最开始再去从头开始执行SQL语句,前面执行了的十条SQL语句作废,这种回到最开头的情况叫做回滚。如果你不回滚,接着把不通过SQL语句后面的语句继续执行的话,就会发生数据不一致的情况了。数据不完整、不同步了。会导致系统数据不健全。

事务就是用来确保所有SQL语句顺利执行,这里的顺利执行,并不仅仅是指不会报错,而是这个SQL语句是按照你的业务逻辑来执行,就算一条SQL语句不报错,但是没有按照业务逻辑的话,也可以让它前面的所有SQL语句作废,进行回滚。当所有的SQL语句全部按照你的业务逻辑意思顺利执行后,就可以把它写入到数据库中去永久执行。

事务不可分割,不可以一分为二来执行。

事务:

1.提交:如果你觉得所有的SQL语句执行都是正确的,你可以调用提交,永久的写入到数据库、永久保存

2.回滚:在执行SQL语句过程中,发生任何问题,都可以回滚、取消前面执行的所有SQL语句,回到初始状态。

今后业务涉及到的很多的SQL语句,在把所有的SQL语句发送到数据库中去操作数据之前,先建立一个事务,在事务里面一条一条的执行所有需要的SQL语句,执行完了之后,你在决定到底是提交还是回滚。提交,则所有的SQL语句会全部写入数据库中保存、执行。回滚,则会前面所有执行的SQL语句全部取消,事务保证整个业务的完整执行、确保了数据的一致性。

跨行取钱:本行取钱的时候是本行系统,在最开始登陆的时候会调用本系统的验证模块来验证账户密码,但是跨行取钱的时候,不是使用的本行系统,所以最开始登陆的时候不调用别行的系统来验证,而是等你登陆进去后,选好了取款、查询等操作后,再一起把需要进行的验证、操作内容等SQL发送到别行系统上去执行。所以跨行取钱的时候,你输入任何密码都会登陆进去。

取钱时涉及的事务:当你取200元的时候,用户同意取钱,会在数据库中减去200+2元,然后准备给你出钞票,如果此时ATM突然掉电而没有拿出钱,这里系统会回滚,会让数据库中数据回到未扣款时的状态,也就是会把200+2给你加回去。这样能保证这个业务的完整执行和数据的安全性、完整性。

事务不是属于JDBC的技术,是数据库本身的一种机制、特性,但是JDBC可以控制事务,可以控制事务的开始、回滚、提交等。事务的结束有两种要么回滚要么提交。

JDBC中事务有两种模式1.自动事务(默认)2.手动事务(自己一定要提交或者回滚来结束事务)。

自动事务:只要你的SQL语句正确执行就会提交,不管你的SQL语句的执行结果是否是业务逻辑所需要的,都会提交。

学了事务之后,就一定使用事务。

image

JDBC中的事务在Connection接口下管理,设置事务模式的方法是setAutoCommit(),参数可以是true或者false,true的话表示自动提交式事务管理,false表示手动提交式事务管理。默认是true。

image

在手动式提交事务管理中有两个方法,commit和rollback,这两个方法是用来提交和回滚的。手动情况下,要自己亲自调用这两个方法。

image

当选择手动提交事务模式的时候,如果最后的时候没有提交或者回滚,会默认回滚。

image

image

这里使用Statement来执行SQL语句,设置为手动提交模式,但是最后没有提交也没有回滚,此时会自动回滚,所以数据库中数据还在。

image

当你调用的一个事务结束之后(rollback或者commit),新的事务又可以开始使用了。

image

image

这里一个连接中有两条SQL语句,有一个事务,两条SQL语句st和pst,等两个SQL语句执行完后,一起提交。

image

image

而上面这种情况是有两个事务,第一个事务st执行完后,手动提交了,然后数据库中的数据删除了,然后执行第二个事务,第二个事务没有提交也没有回滚,则默认回滚,所以显示数组里都是1,表示插入执行了,但是因为最后又回滚了,回滚到了事务最开始时,数据库中没有数据的状态,所以数据库中仍然没有数据。

image

image

把模式改为自动提交模式,最后一个事务里的两条SQL语句都会默认提交。

image

image

这种情况,最开始把事务设置为自动模式,第一个SQL语句执行,把数据库中的所有数据删除了,然后等待执行第二个SQL语句,并且在执行第二个SQL语句前把模式改为手动了。执行完第二条SQL语句后,往数据库中插入了10条数据,这样两条SQL语句算是执行完了,然后在决定这两条SQL语句是提交还是回滚了,因为执行完第二条SQL语句后,模式是手动的了,因为没有写明是提交还是回滚,就默认回滚了,就会回滚到第二条SQL语句没有执行前的哪种状态,也就是数据没有的状态。

image

需注意,如果你把模式设置为自动模式的话,就不能在手动的去调用conn.rollback或者conn.commit了,不然会报错。

image

image

这种情况下,有两个事务,第一个事务是手动模式,st执行完SQL语句后,手动提交了,所以数据删除了,第二个事务是自动模式,pst执行完后,会自动提交,所以又添加进来10行数据,最后结果还是10行数据。

image

image

image

这种情况最开始是5条数据,往里面插入数据,开始设置事务为自动模式,执行第一条SQL语句,插入一条数据,然后在执行第二条SQL语句前把事务模式改为手动模式,再插入另外一条SQL语句,两条SQL语句完成了之后,一起决定这两条SQL语句是提交还是回滚的时候,手动模式,因为没有显示声明,所以默认回滚了,回滚到第二条SQL语句开始执行前的状态,所以数据库中只会【学Java,到凯哥学堂kaige123.com】插入第一条数据,但是实际上第二条数据也插入过的,不过回滚的时候又把它删除了,看uid从348->350,可以知道中间空了一个349,就是第二条插入后又被删除了的那个。

image

image

image

0
0
分享到:
评论

相关推荐

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    《深入理解JDBC Driver 3.0:聚焦SQL Server JDBC》 在IT行业中,数据库连接是应用程序与数据存储之间的桥梁,而JDBC(Java Database Connectivity)则是Java平台中用于访问数据库的标准API。JDBC Driver 3.0是针对...

    sqlserver驱动包 jdbc驱动 sqljdbc.jar和sqljdbc4.jar

    SQL Server驱动包是用于Java应用程序通过JDBC(Java Database Connectivity)接口与Microsoft SQL Server数据库进行交互的必备组件。本文将详细介绍这两个重要的驱动文件——sqljdbc.jar和sqljdbc4.jar,以及如何...

    sqljdbc和sqljdbc4 sqlserver最新驱动

    SQLJDBC和SQLJDBC4是Microsoft为Java应用程序提供的用于连接SQL Server数据库的驱动程序。这两个版本都是JDBC(Java Database Connectivity)驱动,允许Java开发者在应用程序中与SQL Server进行交互。下面将详细介绍...

    Spring Data JDBC与JDBC的区别

    Spring Data JDBC与JDBC是两种不同的数据库访问方式,它们在Java开发中有着广泛的应用。JDBC(Java Database Connectivity)是Java平台的标准API,用于与各种数据库进行交互。它提供了低级别的数据库操作,如建立...

    mysql jdbc 驱动 适用于5.6版本及以下数据库

    mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及以下数据库 mysql jdbc 驱动 适用于5.6版本及...

    mysql jdbc 驱动 适用于5.7及以上版本数据库

    mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上...

    sqljdbc41、sqljdbc42的官方jar包

    在Java编程语言中,JDBC(Java Database Connectivity)是一个核心的API,用于连接Java应用程序与各种类型的数据库。这里我们关注的是两个特定版本的Microsoft SQL Server的JDBC驱动:sqljdbc41.jar和sqljdbc42.jar...

    sqljdbc4.jar和sqljdbc.jar下载

    sqljdbc.jar 类库提供对 JDBC 3.0 的支持。 sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。 注意: JDBC Driver 2.0 不支持 JRE 1.4。...

    Dm7JdbcDriver16.jar Dm7JdbcDriver17.jar Dm7JdbcDriver18.jar

    在给定的压缩包文件中,包含了三个不同版本的达梦JDBC驱动,分别是Dm7JdbcDriver16.jar、Dm7JdbcDriver17.jar和Dm7JdbcDriver18.jar。 1. **JDBC驱动介绍**: JDBC是Java中用于与各种数据库进行交互的标准接口,它...

    sql server2000 jdbc

    SQL Server 2000 JDBC 是Java编程语言与Microsoft SQL Server 2000数据库进行交互的一种重要方式。JDBC(Java Database Connectivity)是Java API,允许Java应用程序通过Java虚拟机(JVM)与各种数据库建立连接。在...

    Access_JDBC30

    标题 "Access_JDBC30" 暗示了这是一个与Microsoft Access数据库相关的Java JDBC驱动程序。JDBC(Java Database Connectivity)是Java编程语言中用于连接和操作数据库的标准接口。这个jar包,"Access_JDBC30.jar",...

    kingbaseV8 jdbc 驱动

    KingbaseV8 JDBC驱动是连接KingbaseV8数据库的重要组件,允许Java应用程序通过JDBC(Java Database Connectivity)接口与数据库进行交互。JDBC是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了...

    sqljdbc4(sqlserver jdbc驱动下载和安装)

    在IT行业中,数据库是至关重要的组成部分,而SQL Server作为一款广泛应用的关系型数据库管理系统,它的连接与操作离不开JDBC(Java Database Connectivity)驱动。本篇将详细介绍如何下载和安装sqljdbc4,这是...

    access的jdbc驱动

    Access的JDBC驱动是Java数据库连接(Java Database Connectivity, JDBC)的一种实现,它允许Java程序与Microsoft Access数据库进行交互。在JDK 1.8之后,Oracle公司不再默认提供对ODBC(Open Database Connectivity...

    java jdbc 需要包

    Java JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一组接口和类。它提供了一种标准化的方法,让程序员可以使用SQL语句访问数据库,而无需关心具体的数据库实现细节。在Java应用...

    sqljdbc4.jar, sqljdbc41.jar, sqljdbc42.jar三个包

    标题中的"sqljdbc4.jar, sqljdbc41.jar, sqljdbc42.jar"是指Microsoft SQL Server为Java应用程序提供的Java Database Connectivity (JDBC)驱动程序。这些JAR文件是数据库连接的关键,允许Java代码与SQL Server进行...

    sqljdbc42.jar、sqljdbc41.jar 更新日期2017-12-21

    标题中的"sqljdbc42.jar、sqljdbc41.jar 更新日期2017-12-21"指的是Microsoft SQL Server的Java Database Connectivity (JDBC) 驱动的两个不同版本,它们分别对应于Java SE 7和Java SE 8的兼容性。JDBC驱动是Java...

    sqljdbc 3.0及4.0

    `sqljdbc`是Microsoft提供的一个驱动程序,使得Java应用程序能够与SQL Server数据库进行交互。在这个场景中,我们关注的是`sqljdbc 3.0`和`4.0`版本,这两个版本都是专门为Java设计的,用于连接SQL Server 2000。 `...

Global site tag (gtag.js) - Google Analytics