00:00
好,那么接下来咱们就玩一个转账啊。来写一个类JD bc test111来,我们给它最由段化之后,诶,需不需要准备circle脚本啊,见表需要吗?Drop table if t下account行吧,这是不是账户表啊,Create table啊,T下下account账户创建出来这个账户表里边有什么呢?有账号咱们就给个账号,就给个余额就行了,别的咱就别给了,好吧,别整那些花样花里胡哨的啊,咱就主要验证一下事物行不行?账号这一块咱们用啥呢?用in也行啊,Big in也可以啊,随意吧,随意吧,随意吧啊,或者用字符串行不行也可以,没问题啊,Balance就是double呗double啊。
01:04
七。逗号二。啥意思啊?第一个七。表示七个有效数字。啊,这个二表示两个小数位。那您自己研究一下啊,七逗号这个七代表。有效数字。七表示有效数字的个数二表示小数位的个数啊,那。有效数字还记得。从左边起不为零的数字开始被称为什么有效数字啊,来insert into吧,咱们这个T下降count这张表,然后呢,其中account number呢,Balance,我们插入值啊,第一个账户就是幺。
02:10
幺幺吧,行吧,余额呢,就是两两万。行,要要不就这么着吧,啊,2万块钱来,接下来我们第二个账户的话,咱就写成222呗,行不行,那这个地方用int也行啊,不一定非得用long类型来int吧,那接下来这个钱呢,是没有的啊,这个是零。行不行,好,那这个脚本咱有了。那咱们得把这个数据库。初始化一下吧。这个脚本。我想把这块的东西复制出来,就是不想带前面的星号,我能不能把这块的东西复制出来。
03:09
能。这个idea工具是很神奇的啊。有一个快捷键,有有个快捷键啊,是可以的,对这个快捷键我忘了应该是。Out shift in third。复制啊。吹的。这一。Out shift insert。行吧,来。
04:06
行了,那接下来我们这块呢,能不能。哎,别用这个了,就直接还是用我们S得了啊,这有中文没有,有没有账户表。没有吧,没有啊,走过来这个账户应该有了,现在数据库里边应该是有我们这个。哪个呢,这个。没有主见,我没加主见啊,我没加主见。是不是这样的呀,好,那么接下来呢,我们准备好之后。就可以开始实现我们账户转账了,各位啊,来我说一下啊,这种块编辑以后呢,你可能会用得着啊,Out shift insert啊看见了吧,你想写代码可以写是吧?哎,对,你可以这样写的,这样写就批量编辑吗?批量编辑啊,Out shift insert。
05:33
好了,那咱们接下来就就写写啊写一写啊,写的话咱们从这复制一下呗,还是老规矩,咱们不写了啊,咱复制粘贴改代码,改代码,你们有意见吗。没意见,那我就继续了啊啊,要不然这个可能有同学说老师你这光复制粘贴都把我复制懵了,都这个来。各位,剩下那本书不用动开始了啊,注意听了啊,讲重点呢,讲事物啊,咱讲事物的事物非常重要啊,来那这块呢,咱们就。
06:08
转账我准备啊,我准备从这个账户里边往这个账户里转1万块钱,最后你这个账户应该是1万,这个账户也应该是1万,对吧?好,那接下来咱们做这个事怎么做呀?这个SQ语句得先写上吧,来更新一下是怎么更新啊,对了,哪张表提一下讲count吧,Set balance等于多少。问号对吧?外条件是什么?账号等于问号就改这个账户的余额吗?对不对,好,那么接下来我们怎么把这条词语编译一下,怎么编译connection.prepare是不是这条语序就编译了,编译了。编译完了,编译完之后呢,你是不是应该给问号传值,怎么传。那就点第一个是double吧。
07:02
第一个问号啊,多少钱1万啊,是不是1万?第二个问号的账户,你是把哪个账户的钱改成1万。111那个账号吧,好给第二个问号,传的值是多少?111,也就是说我这个是把幺幺账户的钱改成1万。然后改了啊改了怎么改点XQ的RZ的好,我们大家是不是改完了,接下来是不是再给问号传值,好那我问你是不是应该把这个复制一下贴过来,把哪个账户2222这个账户的钱,222这个账户的钱是不是也改成1万好这个位置是不是看的加等就行了,各位诶能看懂吗?
08:00
如果输出这个count要等于等于二,这说明什么?转账成功啊?其他情况是转账什么失败吧?诶能看懂吗?为啥是二啊?甲等,你们见过这个运算符吗?累计呀。这个count等于一,如果再执行一个,是不是就累计是二啊。能看懂吧,好,接下来接下来注意看啊,我让它中间这个地方出现异常。这个明显会出现空指针异常,出现异常下边代码是不是就不执行了,直接进到这个开块上执行了,我想看看这个数据会不会丢。因为我们说过JDBC当中的事物是支持自动提交机制,自动提交的意思什么意思,只要执行一条语句就怎么着提交一次,我们来看这个数据会不会有问题,注意听了各位啊,关键时刻来了,来点一下运行,我们来看看,最后出现了空值异常,我们如果数据库没有任何问题,就证明没问题,来我们刷新一下。
09:12
丢了1万块钱。丢了1万块钱啊,是不是啊,所以您这个程序是不是不对呀?好,我们是不是应该把这个语句的执行,以及这个语句的执行放到一个事物里边,要么同时成,要么同时败,不能出现一半乘一半外数据就丢了,所以我们要将数据库JDBC的自动提交机制改成手动提交。设置自动提交括号当中你可以传一个false,表示禁用自动提交模式,能能看懂吗?非常经典的一行代码,拿到connection之后,在这个位置上将什么将自动提交机制修改为手动提交,怎么修改connection set out to commit false,就只凭这一行代码,他以后就不提交了,但不提交也不行啊,您这个事儿做完是不是还得提交啊?所以说只要程序能到我这个地方,是不是就说明都成功了?因为如果上面出异常,这块肯定走不到,换句话说,能走到这上面就是没出异常。
10:43
懂什么意思吧,所以说在这里啊,程序能够走到这里,说明以上程序没有异常,事务结束手动提交数据来connection点这个方法只要用上就行了。
11:03
两行非常经典的代码,那我问大家,为了保证数据的安全性,遇到异常我们不用说别的,必须回滚。以保证数据安全吗?听懂了吗?所以这块我问大家是不是调用对象的另外一个方法叫呀,如果说要是怎么着不等于什么,那我们在这要调用connection.roll back方法回滚,这叫手动回滚,才开始向上,好,这能看懂吗?这个叫什么?回滚事务这叫什么?提交事务这叫什么?开启15个。开启事务手动提交。回滚事物。这个章节讲的重点就是三行代码,你把这个给我记住,点set,什么out to commit forceth,点点roll back。
12:09
是不是很简单,设置自动提交机制为关闭手动提交,手动回滚,整个过程当中再出异常还有问题吗?我们把数据恢复一下,把它变成多少2万保存一下,刷新一下,好,各位现在数据是不是正常了,接下来我们再去执行,执行会不会出现空值异常,虽然上面这个地方更新了,出现异常,到这个位置是不是回滚失误没有提交大家看数据,各位F5刷新是不是还是该是2万就是2万,该是零就是零,对吧?直到这个位置上,我们怎么着不再出现异常,我们再去彻底执行一遍,我们再看这个数据他就对了。好,那今天讲的非常重要的一个内容就是关于JDBC事务的控制三行代码给它记住。
13:04
行吧,啊,三行代码给他记住各位啊。那事物讲完了,就这就知道这个就可以了。就拿到联系对象之后赶紧干,干干什么,先把什么自动提交机制,机制给他关了,然后呢,一顿夸夸,一顿执行,不管他执行这个SQL语句执行多少个。你觉得哪该提交,你就在哪儿提交。听懂了吗?遇到异常你就回滚。以保证数据的安全性,代码非常简单,各位啊,事物呢,虽然这个东西啊,它不太好理解,但是呢,它代码很简单啊,在JDBC当中代码是这样的。但是各位啊,我现在说的这是单机事物对吧。也就是说数据库现在只有几个,一个如果是集群,我说的男的是集群啊。
14:00
什么意思?一个数据库能一个数据库可能不够,有的项目是不是有可能会搭多个数据库,你这个数据库在北京,那个数据库可能在这个上海,那个数据库可能在这个南京。我们现在要干啥呀?从上海的数据库往南京的数据库里边转一笔钱。优越。这是不是跨行转对吧,跨行转数据库是同一个吗?表是同一个表吗?不是。那你那个时候控制事物可不是这个代码啊,那个是分布式事物。这个是单机事物,我们先搞简单的单机事物,非常简单。有些同学可能听不懂什么是分布式是吧?分布式事物是说你的数据库。啊,不是一个是一个集群形式的,是一个分布方式的,或者叫分布式的数据库。
15:03
需要分布式的事物。你必须保证什么呀?这俩数据库都成功。最后才能成功。嗯,这个以后你们会接触啊,在后面后面啊这块呢,咱们先搞简单的,您简单的单机事物还搞不定,还不理解,那你将来多机分布式事物,那你就就就困难了,各位啊,就困难了。
我来说两句