00:00
来了,今天的课程是第六章,叫高级特性。高级特性。这里边咱们会学这么多概念啊,游标异常存储过程函数触发器,哎呀,这些名啊,全都是比较生的是吧,就第二个咱。学过了是吧,Java中的异常异常期是什么对吧。啊,剩下的比较生哎,但是都不难啊,你好好听都不难,没有什么特别特别难的东西啊。好,咱们来简述一下这个PL circle的块的这个组成部分,一共有几块组成啊,三块,第一个是声明区。第二个是。执行代码执行区,第三个是异常处理区。OK。哎,循环咱们昨天学了多少种啊,好简单给大家捋一遍啊,第一种咱们学习了叫路啊,简单循环。
01:04
然后呢,又学习了well。然后嘞,又学习了for,又来了一个for r啥意思啊。反转是吧,哎,反转。对吧,其实就这几种啊,对吧,最后最后来一种的话,无外乎就是循环里边套循环是吧,哎,多重循环。好。双重循环,如何跳出外层?昨天咱们怎么搞的?哎,是不是这个玩意啊,哎,使用这个标签哈,哎标签。OK。最后一个问题是tap和肉tap有啥区别,这个叫表的列是吧?啊,这个呢直接就是。表。哎,看来昨天掌握还不错啊。掌握还挺好,好今天咱们这就不读了啊,一堆呢啊好一个个来看啊。
02:04
首先咱们来看一下游标,我记得之前咱们讲的时候,我提过一嘴哈,我说这个得使用游标来解决。呃,我在讲这个的时候。回顾一下啊,我在讲这个的时候。Selection from a。我随便写了啊,然后呢,我将整个查询的结果条件。No啊,假设我就先写了一个S111啊。这个是查询的是这个学号的一个同学是吧?我会把这一个同学的全部信息放在一个person的对象中,还记得否?哎,我现在呢,有学号做条件,我可以100%的确定。咱们这个语句查询的最终结果是一个学生没问题吧,因为是学号条件,学号是什么主见,所以是唯一的吗?OK,那这个语句呢,是没有任何问题的,但是如果说我不加这个where。
03:09
那么咱们这个查询的是不是N个学生啊,好多60多个学生了吧,那60多个学生我现在要往一个person变量里边往里边怼,能怼进去吗。随便去是吧,为啥呢?这是一个对象,而你要往里边搞60多个人,所以这个就不行了。不行了,咋解决呢?其实按照之前学过的逻辑上而言的话,你查询出60多个人,我们可以定义一个数组,或者说list,是不是能把60多个人装进去了?没问题吧,哎,这是Java里边哈,装数组里边,装list里边都没问题,但是数据库中没有数组的概念。
04:00
这很重要,这是今天的第一句话。哎,我先打个分割线,多搞点啊。数啊,不是数据库中没有数组或集合的概念。所以如何储存?多个结果集呢?哎,想储存多个结果集,只能是数组或集合,数据库里还没有,咋办,流标出来了。这就是游标的概念。好,咱们首先第一句话这个话能听懂吧,啊,因为数据库里边没这个东西,所以必须得用游标。哎,咱来看看游标到底是个啥好吧?啊,这篇说是为什么要用这个游标呢,大家看啊,我这块四口语句查询了一个结果集,结果集。
05:05
我这个结果集需要给这个咱们的Java或者C语言来接收。买C语言来接收。那么这块我给大家说了说明了哈,他结果集呀,结果集是一堆东西吧。结果结对吧,比如说就是莱这个这个学生表是不是60多个人啊。哎,我能一股脑的全给全部都发送给咱们的Java程序吗?这写着呢啊,是无法发送的,也无法接收,因为设计语言只能接收单个变量或一条记录,无法接收结果集,一定要重点是这个及这个字。这个级表示多个。哎,无法接收这么多东西。哎,无法接受,就像咱们学知识,得一点点来,一年一年从小学到大学是吧,你不能说咣当一年全都学完了,没有那个过程。OK。然后呢?
06:00
咋解决?这么解决四核语句还是查询出一堆结果集,然后呢,我可以把这个结果集放在邮标里边,然后通过游标一条一条的交给咱们的价位程序。一条一条的交给价里头去。啊,也就是说咱们游标是不是解决上面这个问题的。什么问题?Java没有办法直接接收一个结果集,他只能一条一条搞。哎,那谁数据库中什么技能会让你一条一条给他搞过去呢,游标。只能只能这么搞。那到底什么是游标呢?游标是系统为用户开设的一个数据缓冲区。它用来存放SQ语句的执行结果。就是查询吧,Circle以后记住了,这个circle代表的就是select语句。Select select number什么什么东西啊。
07:01
好,存放查询语句的执行结果,每一个游标区啊都有一个名字,用户可以通过流标逐一获取记录。好,对这个游标的概念是不是有一有一点点的印象了?好,我再给大家来生活中的游标什么样。这样。这样。见过吗?每个人都怼过吧?关键的是是重是不是这个重,重点不是他啊,重点是这个东西,这个东西。这个东西它的作用是什么呀?是不是缓冲区啊。缓冲区啊,它就是缓冲区。哎,你看啊,如果没有这个东西呢。没有一没有这个东西啊,就是一瓶,就是感冒了上医院吊水去了是吧,他就拿一瓶这个玩意儿,说来张嘴喝它。是吧,或者说拿一个12米长大针管直接咣当怼进去。一口一口气就给你怼屁股里去。
08:02
那就废了是吧。所以咱们是不是得一滴一滴慢慢搞啊。对吧,哎,打点滴嘛,一滴一滴慢慢搞,这个就是缓冲区,其实这个缓冲啊,这两个字我觉得写的特别棒。生活中的缓冲区是不是慢慢来啊?他给你一个很大的一个空间,说你慢慢来,不着急,是不是这意思,缓冲在数据库或者说在程序的世界里边,缓冲也是这个意思,哎,慢慢来,我给你足够的空间,你只要慢慢搞就可以了。对吧,哎,这个就是生活中的缓冲区,那这个缓冲区就是咱们数据库的游标的概念。啥意思呢,这么多药没有办法,一口气怼怼怼身体里边哈,没办法,所以怎么办?我可以一滴一滴往身体里边搞。这就是游标的概念。游标的概念。好吧,这是游标的概念啊,咱们慢慢去感受好,那这个游标的基本原理啊,是这样的。
09:09
是这样的啊,通过数据库,然后执行PSQ程序,检查行,检索行就是啥呢,把62条数据,假设62个人嘛,把这62条数据啊,全部都保存到游标里。你可以怎么理解啊,最简单最简单的理解游标,你就认为我一说游标你就认为是数组行吗?好吧。他把62个人保存到游标里,就是62个人保存数组里,OK,然后通过咱们操控游标,从这个游标中一行一行往去往出提取,就类有点类似于干嘛呀,便利数组,OK好吧。那到点这个游标咱们应该怎么去用呢?一共是四个步骤,直接咱们一点点来给大家写。这个游标啊,它是这样的,它就是游标类型。
10:01
好吧,按照这个顺序,我给大家写一个游标啊。来,现在这边写。好,先在这边写。呃,这回呢,咱们写个啥嘞,简单点啊,快列。哎哟,我去。首先第一步啊,不是这个第一步叫声明流标。啊,有点类似声明数组是吧,声明的数组这个数组啊,这个写起来还是挺挺烦的啊,这个代码呢,非常生。但是得慢慢来,好定一个声明数组,就是声明游标嘛,这个游标的声明这么写的CU。这是游标类型。定义游标的名买,比如说叫啥来买买买,我要我要搞什么呀。就搞搞我的员工吧,好吧,员工表哈,我就要麦麦。
11:05
回来了。标。这叫游标,行吧,游标。好了,它是一个什么东西?你声明的这个游标是什么东西?有点类似于咱们在写加长程序的时候,你定义一个数组。对吧,后边哎,数组应该是大括号给值是吧,这里边儿你是不是得告诉他里边装什么东西啊。对吧,比如说里边装AA,我去整哪去了A,然后再装个B,是不是这意思啊。那你看我这块就是相当于什么呢?相当于前边这段。后边他不说了吗?意思意思就是说游标是啥。有点类似于你看数组装啥好吧,那后边应该怎么写呢?那我后边直接写一个员工吗?LA,咱们把这个列直接写什么,写个ID,写个first first。
12:06
再来一个salary。对吧,来自于员工。Emp。OK。这样的话,你看其实这个语句干什么呢?查询的是不是就是25个员工啊。25个啊,那么我就把25个,25个人的相关的这些信息全都放在什么里边了。是不是放油标里边了,OK,哎,放油标里了,好,这是咱们的第一句话啊。啊。将。就是将结果及放在储存到。游标中。那你想用这个游标啊,你必须得把这个游标啊声明出来啊,哎,这个是声明游标,咱们得还得给这个游标声明一个对象,因为你们后下边没有办法引用这个类。
13:03
这相当于什么呀,相当于类型啊,类型我还得这么搞一步。定义一个啊游标。游标,然后它的类型是什么?是上边这个类,哎哟,我去上边这个类型把它全引过来。Roll。六菜上边你就想象上边就是类,下边呢,通过这个类啊,我是不是得定一个对象,我能操真正的操控这个对象啊,哎,这是这样的啊,写下第二步,这个不属于真正的步骤,我给写个故事。为游标类型,为定义好的游标类型。声明出。对象。下边呢,我才能应用起来啊,应用起来好了,那咱们的第一步就搞定了,看第二步是什么,打开游标。
14:00
就是open open这写的什么,打开的open的是油标的是不是变量啊。来,那你说open的是谁?不是啊,不是这个YYY币啊,不是Y币啊,是油标啊,开油标啊。开游标。第二。打开游标。打开。刘标。还类似于什么呢,呃,哎,咱还没学那个哈。I物流是不需要的是吧?好像在那个C语言里边,I物流是需要open的。呃,先open,然后操作,最后可咱这个Java中的IO流它是自动open的啊,其实这个就是类似于那个。Open,把油表打开。好了,那这个里边是不是有25个呀,对吧,我接下来要操作数据了啊。循环取出几个呢?
15:01
循环。取出就取出前三条吧。取出。呃,前三条儿数据。哎,循环。那就是I in13嘛,对吧,Look and。这个就相当于便利这个数组啊,便利这个数组。好这步循环的里边干嘛呢,看这呢。提取油标。控制游标向下移动,提取一行。提取一行啥意思呢?这是数组。就写假设写012好吧,第一次循环拿的是它。你看我这个小箭头哈,第一次循环拿到它,我咱们得是不是得下一次控制让这个箭头蹦到这儿来呀。这个叫游标下移。
16:00
游标下移。如果你不下移的话,你永远指向的是零,对吧,你应该让他下一次指一,再下一次是不是指二,再下一次指三啊,哎,不停的移动啊,这个就是。好了。向下移动,那这句代码怎么写呢?来写的游标变量into,然后record类型变量。这么高?CH。啊,然后呢,把这个游标叫做游标。由标to给我怎么定义这个变量呢?完毕是吧?给他搞到YB里。哎,写这么一句话。就是。这个是。呃,这是第三步啊。随着每次循环。每次循环。控制流标向下。移动。并。
17:03
出行数据啊。好,怎么取出当前行内数据呢?直接输出就好了。DBMS。刚去吗?这样。你这块呢,搞了一行进来,那我就输出这行数据呗,看着啊这么舒服的。就是YB点都,我都搞出什么了都。有ID first name和salary是吧?来打印吗?ID,呃,D。哎呀,第二个值怎么给拷出来啊。连接。加个横线。yb.first。Name。再拼一个横线。YB。
18:01
点salary。好,这样,这就是这个循环了。啊,整个循环完成,最后呢,不要忘记这个简单对吧,Close啊,最后咱们要close流标。好,再来看一看它执行的过程啊,等着。看到吧,就三个人啊。哎,三个人。如果这块你改成从数组中取出八个人来。就八个人。OK,这个其实啊,就是相当于这个过程啊。啊,这个注释没写第四步。关闭游标。释放资源。好。来咱们从头捋一捋啊,首先呢,声明了一个游标,声明了一个游标,然后呢,为这个游标啊。
19:06
搞了一个对象,这个对象到底是什么意思呢?你这么看,我给他起换一个变量名,你就知道啥意思了。一个对象。哎,别的叫做。员,哎,这这还这里面不是还支持中文叫啥呢,就叫员工。员工。行吧。改过来。好,这样你再看。首先呢,我搞了个游标,这个游标相当于是不是有一个数组啊,里面装了好多东西。然后呢,我要定义好一个游标类型的一个变量,这个变量,这个变量到底干嘛使的用来啊。用来。接收。
20:01
游标中每一个。这下。明白啥意思吗?就是这个意思啊,你看我换成Java代码你就知道啥意思了,如果是这句话呢,咱们搞出来的就是in。呃,中括号AR等于。来个A,来个B,行了,就写这样好吧,第一句话相当于这个。OK,变量名换成游标。行吧。好,那第二个EP这个玩意到底干嘛使的?这样的,你从游标数组中拿取的某一个元素,用一个变量来接收。好,明白啥意思了吧?明白啥意思了吗?而后边这个类型到底是咋回事嘞,你看啊。你看这个它用的是什么类型,是不是游标的类型啊,你这么看啊,那你说从游标数组中拿到的第一个元素是啥类型。
21:06
是啥类型,怎么看你是不是得就是里边的数组中元素的类型,是不是就是咱们数组的类型啊。对吧,那咱这个数组的类型是什么,是不是就是它呀。OK。然后你再往后看这个打开游标就能简单了,关键是看这循环这一块,你看是不是咱们把游标数组中每一个元素这句话相当于什么看好了,相当于这个。游标数组中每一个元素,我这里特意用了一个I,好吧。给了谁呢?能看懂了吗?这块。然后我下边紧跟着就输出这个员工的ID,姓名和钱,OK。这就是最后呢,关闭游标就很简单了,这就是咱们整个的这个过程。
22:06
呀,我这转都转不出来了,好尴尬呀。好,这就是整个游标的过程啊。这样还得大家自己写一下,然后想读我后边这个注释啊。好吧。这个咋追不上来了呢。
我来说两句