00:00
那么下边呢,我们来看这个第一章关于GDBC概述啊,首先呢,提到一个概念叫做数据的持久化,嗯,这个呢,其实在我们讲这个数据库的时候呢,提过这个概念了啊,所谓的持久化呢,就是把数据保存到可调电式存储的设备当中,以供之后使用,像我们之前呢,在Java基础里边提到的内存中的集合数组,这个呢,只是内存层面的啊,不能够达到数据的一个持久化。那基础阶段里边,我们讲IO流的时候呢,提到过本地的文件啊,那这个呢,我们其实其实呢,就可以实现数据的一个持续化了,我们把数据呢,存储到相应相应的这个格式的文件当中,哎,图片格式的文件啊,这个音频格式的文件,视频格式的文件,或者说呢,Tit本本文件等等,其实呢,我们使用文件呢,已经可以实现这个持久化了,哎但是呢,我们又讲了一个数据库,哎咱们在讲数据库的时候也提到过,说为什么我们主流的哎,或者说更多的这个数据去有化,选择用数据库呢,咱们有学过数据库了,为啥呀,方便管理,高效快捷,嗯,这个怎么能感觉到高效跟快捷呢?咱们讲完数据库以后啊,你指的这个会计主要是我们写SQ比咱们写L流那省事了是吗?啊,我以为你说的是那个效率高的啊对,效率高呢,你你跟文件咱们也没。
01:26
去对比过是吧,嗯,就主要呢,我们用数据库呢,看中的什么呢,就数据库里边咱们也讲了哈,都是一些表,表里边呢,都是各种各样的字段,这个你要普通的文件去去这个操作话呢,也可以啊,比如说咱们把这个咱们手机端的这个大家的这个联系人,我们都存储到这个文件当中,比如说插码文件其实是可以的。啊,但是呢,我们很少这样做,因为我们放到数据库里边呢,也挺方便的是吧,就是这个字段呢,我们还可以涉及的很多,你要放到文件里边的话呢,这个文件呢,用标签那种方式去去保存插包文件就是看着呢也可以,但是呢。
02:03
没有,数据库里边更容易存储,就是我们存储这个字段可以更多,还可以限制它的数据类型,限制它的一个存储范围,还可以设置约束是吧,还这个功能呢,就很丰富了,那同时的话呢,我们数据库呢,横向来看,我们还可以存储的数据量也是非常庞大的,百万上千万的数据都可以,同时的话呢,我们还可以设计多多张表,实现了多表的一个查询,这个都是很方便的点,所以呢,诶,我们更多的数据持久化选择的是数据库啊这样当然了,对于一些比较小型的一些操作,一些文件,咱呃,这个数据化的我们也会选择文件啊,就插包文件,其实也是我们典型的一种,呃,这个文件格式。那咱们讲这个数据库的时候,后边咱们讲这个数据库连接池,咱们也会用到这个插包文件啊,这是一个包括呢,咱们讲这个数库连接这块,咱们也会用到普通的文件,就我们也没必要太兴师动众的,什么都用数据库比较简,这个简洁的几个小的数据,我们就用文件也是OK的啊,是这个意思,然后下边呢,提到了叫数据持有化的一个技术。
03:05
那我们现在要讲的是GDBC,然后呢,后边还有一个呢,叫g do啊,Java data object技术以及呢第三方的框架,像harmon和MY等等,那我们要说的就是呃,GDBC还是有必要学习的,因为呢,后期我们的g do或my basis他们只是更好的封装了GDBC啊,未来大家呢,对这个后期的框架呢,有个更深入的一个理解认识,那我们要讲GBC以及呢,这个技术呢,是每天都在更新迭代的,那我们后边还有微服务框架啊,那么可能两三年以后呢,还有更好的一些工具,那么底层来讲,这个原始的这个结构呢,其实是不变的,所以我们掌握了这个底层的这个内容以后啊,你在后期的变化,其实呢,你也是很容易的切换的啊,是这样的原因啊,这个g do呢,相当于也是对GDBC进行了一个封装啊,属于这样的啊,这个清楚我们JDBC的它的一个地位啊,然后下面呢,关于GDBC的一个介绍,很显然呢,这是几个字母的缩写啊,全称呢叫Java data贝。
04:05
思诶connectivity,诶,Java的数据库连接,诶下边一个介绍说他呢是独立于特定的数据库管理系统,通用的SQ数据库存取和操作的公共接口。说的呢,还是比较官方的是吧,诶这里边叫独立于具体的数据库管理系统,想说明的就是,诶这呢是具体的数据库,诶我们JCPC呢,不是说跟我们具体的某一个数据库深度耦合的,或者说呢,就专门用来操作某一个数据库的,不是,那它呢,就是一个通用的啊,来操作具体数据库的这样的一个叫系统,或者就是呃,相关的一些接口。啊,然后呢,我们要操作数据库的话呢,当然使用的还是circleq,虽然说咱们现在是用Java来操作数据库,那那你其实里边真正涉及到这数据库中表进行操作了,肯定还是用的circle了。
05:01
啊,那你要是不是用circleq,那咱们也没有必要讲circleq了啊,所以还是用的circleq啊是这样的,那么相应的我们这个呃,API的话呢,是存在我们这两个包下,哎,java.circle和Java x.circleq啊这个咱们在这个API层面呢就能看到啊,比如以JAVA8为例,这呢就我们相关的一些这个这个包啊,然后呢,我们提到两个,一个是java.circle。哎,在这呢是吧,还有Java X点,哎色扣。嗯,点circle。在这儿呢?诶,在这两个包下呢,我们打开以后,你会发现一个特点,就是这两个包下呢,提供的接口貌似会更多一些。你看这个接口要多一些,这个呢类要少一些,上边这个扎了点色口。啊,也同样的道理,接口还要更多一些,啊类呢要少一些,那为什么会有这样的特点呢?啊,因为这呢就提到了,我们刚才提到了说GDPC呢,它提供的是我们来访问具体数据库的,呃,这种公共的接口,当然不是因为这个接口啊,也就是说呢,我们这呢,其实更多的提供的是一种规范,因为呢,咱们不是深度的跟某一种数据库去耦合的,我们这块呢,提供的更多的是一种标准,标准规范这个词呢,咱们在讲接口的时候呢,重点提过啊,所以呢,这里边具体怎么去操作这些数据库,我们没办法指明,我们只能指明一些你应该具有这样的功能,但具体怎么实现呢?你具体的数据库厂商去提供相应的驱动,所以呢,我们会看到在GDP当中更多的还是接口。
06:35
哎,这样的概念啊,那这呢,下边也提到了,这BC呢,就为访问不同的数据库提供了统一的途径啊等等,下边给到驱动的概念,我们通过这样几个图来理解一下,关于Java程序呢,去操作不同的数据库,这呢,我列举出来了几个,诶,我们使用频率比较高的关系型数据库啊,Oracle my circlel circle server DB two。这个具体都谁家的,这个大家都清楚吧。
07:00
这俩都是article的是吧?对,然后搜server呢,嗯,这个不知道吗?微软加的嘛,对,DB two呢BIBM加的,呃,这个呢是比较主流的几个关于数据库啊,这个除了这个myle之外呢,剩下这三呢都是收费的啊,Oracle呢,那就是Oracle加的是吧?呃,这个它的公司名呢,就叫Oracle甲骨文了啊,这个数据库名呢也叫Oracle,呃,Oracle当然现在就比较强大了,这个它是Oracle家的,这个呢也是Oracle家的,呃,Java这个语言的那个S公司也是Oracle加的,对吧?他把这个Java虚拟机也都定的差不多了啊这个后期我们讲虚拟机的时候呢,会提到有三个啊,一个是我们三公司自己提供的一个houseboard虚拟机,还有呢,这个BA公司提供的这个g rock的虚拟机,还有IBM家自己提供的一个就G9虚拟机,前面这两个呢,就是主流的就这三啊,这两个呢,已经被这个Oracle给统一了,因为他把B公司也给收购了,然后那个IBM呢,他现在还吃不掉是吧。
08:01
哎,那这两个呢,统一了都啊,成为行业软件开发这个领域呢,也算是一个巨无霸公司啊。行,那么我们认为的数据库里这个账号程序来操作数据库呢?应该是这样的,直接写账号程序,我们去操作具体数据库就好了,但事实上呢,不是这样子的。哎,实际上呢,是这样子的,我们写的障碍应用程序,咱们首先要调用的是JDBC。然后JDBC呢,诶,我们再通过它去调用不同的数据库啊,其实是这样子的啊,那在这块再细化一下,这个跟咱们这个呢,其实是一个意思啊,我们只不过呢,又加了一层,这个叫驱动了啊,通过这个图我们来理解一下这个DDBC,它的一个所处位置和它的一个存在意义。这个我们认为呢,是用Java程序直接来操作数据库,首先说没有问题,可以实现。但是我们真正在开发当中都没有这样去做,而是呢,引入了一套标准,就是三公司提供的叫GDBC这样的一套接口,这套接口呢是一种规范,什么规范呢?就是如何使用Java应用程序来操作数据库的规范,建立它的一个意义所在呢,就是我们其实之前呢,讲接口也稍微带大家提过这个事儿啊,比如说呢,MYSQL当中我们添加一个数据,加一条记录,我们用Java程序去写它这个方法呢叫艾特,因为这块反正你三公司你也没给规范,我们卖soq说了算,我就这个方法名就叫艾,那么到Oracle这块呢,说我叫insert啊,到这话呢说说我叫put等等,哎,名都不一样,人家自己家呢有权利去指定,而且呢,我这个要想艾特呢,我这有仨参数,你这个呢有俩参数,哎,我这个呢四个参数。
09:40
嗯,然后呢,甚至添加一条数据,我们这边需要执行五步,这执行三步,这个执行七步,也就是说呢,这些细节呢,各式各样都不一样,那么对于我们Java程序员来讲,如果我们去操作具体的数据库的话呢,这是一个非常痛苦的事情。哎,这个项目你用的是myle OK,把MYS呢这块细节整清楚了,下一个项目呢,换成Oracle了,那你又得需要对Oracle数据库有更清晰的认识。
10:06
啊,也就是说我们对于账化程序来讲,你需要了解不同的数据库,这个底层的这些实现细节,你才能够实现对相应数据库的操作。那是一个很痛苦的事情,另外的话呢,如果说一开始我们比如说是用的MYQ,后期呢数据量也比较大了,或者说呢,这块你想切换,公司说想切换成Oracle啊,那你这块呢,切换起来也是很崩溃的事,因为里边大量的细节都需要去修改,还不如呢重新再写一套程序呢。啊,所以这个呢,一致性上呢就会更差一些,那为了呢,我们把它进行一个统一,或者说呢,让召唤程序员呢,在编写程序操作数据库的时候呢,有一个统一的规范,我不需要呢去了解这些细节了,诶散公司出面了,说呢,为了维护我们这个生态是吧,让我们这个社区更活跃,为了让我们这个程序员呢更舒服一些,我呢要定一套标准,这套标准就规范了,要想用障碍应用程序来操作不同的数据库,怎么去做,哎,比如说我们要想去添加数据,我呢都叫艾参数呢俩,哎艾呢一共是三步,哎那么我们Java应程序呢,咱们就是调艾的方法,传这俩参数一共呢是还有两个操作就能够实现,对这个,对这个,对这个这个。
11:20
凡是实现了JDBC接口的这些数据库的一个操作了,那么对于我们程序来讲,就是你屏蔽了大量的数据库的底层细节,不需要我们去关注了啊,这个就更好一些,那么这里边呢,呃,需要做的事就是JDBC3公司来定义的这一套规范,那么具体的你这个艾操作怎么去写的,怎么就添加到数据库的,实际上这个S公司呢,这个方法它是没办法写明的,我只能说呢,添加有俩参数什么意思,这个下边你要再做什么,这呢,其实呢,都应该是抽象的方法。哎,都是抽样方法,因为我也不知道你具体要操作哪个数据库啊,我是独立于你数据库这个平台的,所以呢,诶抽象方法,哎,我们就把它封装到相应的接口当中,所以呢,就提到了这个接口的是定义规范的。
12:09
那么对于不同的数据库厂商来讲啊,那要想能够调艾特方法呢,实现对你这个表中的一条数据的添加,那你肯定得提供一个有方法体的一个艾特方法。下边呢,就提到相关的JDBC驱动。那这个驱动是谁编写的呀?对,那肯定就是各个厂商自己编了是吧,哎,散公司才懒得给你干这个事儿呢,你自己的数据库你自己去编,我呢只发布一套标准,然后呢,我发布完以后呢,你根据我这套标准中提供的相关接口,你去提供这些接口的实现类。啊,实验类里边呢,你就需要把我这个接口中的创方法呢,你都重写一下,按照我这个标准来,哎,我这个方法呢,俩参数,你里边俩参数你怎么用,我一共说三步,你这三步呢,下边调哪个方法,方法体是什么,你自己呢写清楚,然后呢,把你这一套实现类的集合封装在一起,我们就认为是各自的一个驱动,所以呢,这个是MY自己做的,这个Oracle,这个是s server,这是DB two,他们各自呢提供各自的驱动。
13:13
那这就可以了,嗯,那么对于我们账号成员来讲呢,我们只需要面向这一套接口进行编程就OK啊,那么有人可能会想说,这个不同的数据库厂商,他们会有这个动力去编写这个驱动吗?必须得有,你没有的话呢,你就从这个Java这个生态里边呢,要慢慢的被移除掉了,是吧?哎,就是你必须要参与这个过程,你就跟说现在这个特朗普主张这个说叫叫什么。不主张全球这个经济合作一样是吧,其实正常来讲呢,大环境就是你必须要全球一体化啊,就是大家呢,要参与整个这个全球的经济的发展当中,你要闭门造车的话呢,那慢慢的你就会剔除掉了,那你的发展其实也会受限制啊,所以要参与进来,那么当这个三公司公布这套接口的时候呢,这个Oracle公司它是有动力要更新的啊,因为这样的话呢,我们Java程序呢,才会更好的去连接你,你要不去更新,或者你根本就不提供,那么对于厂商来讲,在公司来说说,呃,跟你这个项目经理说说,我们这个数据库应该用什么呀。
14:16
啊,他会提这三个建议,前提呢,咱们都假设免费啊,诶他会提别的说,那诶Oracle听说挺有名的,用Oracle吧,你说Oracle不行,Oracle这个连接呢,各种各样的问题啊,上线的话呢,你要别的数据库呢,可能仨月这个这个Oracle就用五个月甚至一年时间,因为这里边细节呢很多不好整啊,老板一听说有道理,那就不用他了,那这样肯定就倒霉了,是吧?诶所以他们一定会有动力去提供这个驱动驱动啊,这是其一,其二的话呢,就是这个S公司啊,他其实也不是说自己说了算的啊。包括呢,咱们说这个Java jdk的更新,他其实呢,每次在更新版本之前呢,都会把这些厂商呢,都叫过来,咱们都是这个里边的会员,过来以后呢,咱们一块商量,商量咱们怎么去更改呀,这里边呢,必然会提到一个妥协的问题是吧,这家说我们这样整,这家说这样整,那咱们一起商量商量到底怎么整,哎,让大家都觉得舒服一点是吧,就是他不会说自己说了算的啊,就是在这个协会里边,大家呢,都会统一的去制定一个标准,也就是说他们本身也是标准的制定者之一。
15:14
啊,是这样的。好,总结一下啊,JDBC,哎,我们下边呢提到两个事儿,第一个叫面向应用的API,这是对于咱们程序员来讲的啊,咱们呢只需要面向这一套接口编程就行了,不需要关注于具体数据库厂商的细节,然后第二呢,就要面向数据库的API,对于数据库厂商来讲,他们只需要针对于S公司提供的这一套接口,这一套标准,提供不同的驱动啊去实现就可以了啊,这就是我们提到的这个两个层次,对于程序员来讲,对于数据库厂商来讲啊,这个比较好理解下边呢这一段话。哎,大家来看一看啊,说GD,呃,GDBC是散公司,这个咱们现在还叫散公司的啊,要不这块写成Oracle呢,你就晕了,因为这也是个Oracle,咱们还叫散啊,GDBC呢,是sun公司提供的一套用于数据库操作的接口。
16:04
Java程序员啊,只需要面向这套接口编程就可以了,而不同的数据库厂商来针对呢,提供的这套接口提供不同的实现,那不同实现的集合我们就称为叫数据库驱动。啊,这就提到叫面向接口编程的思想。不难理解是吧,嗯,那其实咱们生活当中这个经常提的叫USB接口啊,其实咱们平时说的这个驱动这块,我截了个图啊,比如说呢,大家把这个电脑上插一个移动硬盘,或者你插一个这个扫描仪等等啊,你插上以后呢,通常都会有这样的提示吧,应该没有人没见过的是吧?这个提示的话呢,就是在安装你这个外部设备跟我们电脑上进行数据传输的时候,这个驱动,其实我们这个USB呢,它也是一套标准。这套标准里边呢,定义的也都是一些抽象方法,哎,你要想一个外部设备跟我们的电脑进行连接,数据传输,你就要把这套驱动呢去实现一下,那这个驱动谁做的呀?这个不是对,那就看你连的是什么设备了,是吧?你你你你连的是个硬盘,那是不是你买的西部数据加的这个硬盘,那西部数据是不是要提供这个标准的这个实现的这一套集合就叫驱动呗。
17:18
所以咱们一般你像以前的时候买一个什么设备,里边都有个小光盘是吧,那小光盘其实就是驱动,那那个光盘谁谁在哪呢?那就是你买的这东西是什么,它里边就配的光盘,就是看你这个具体的外部设备是啥,诶它就会配啊,这个你虽然叫Windows也好啊,它呢就是实现USB这个规范的时候,我们定义了一些标准,你这个外部设计是什么,你就得把这一套标准呢实现一下,就是驱动程序啊,就是这个概念。好来比较好理解,这就我们所说的一个概述啊。
我来说两句