00:00
那为了加深大家的一个理解呢,我们接下来呢,编写一个程序来模拟一下JDBC的本质。这只是模拟,各位啊,叫模拟什么JDBC奔驰,我们来模拟一下。那这个模拟GDJDBC本质,我们得。得有几个角几个角色呀。一个角色是谁角色吧。三角色是不是负责写这个接口啊,是不是还有我们,我们也是一个什么角色呀,我们负责写这个吧,好,应该还有一个角色。就是什么数据库厂家,这也是个角色呀,是不是,哎也是角色,那这个数据库厂家这个角色呢,他负责写的就是这些东西。
01:08
是吧?好,那么接下来我问大家,这个是接口,接口永远都有调用者和实践者,谁是调用者,谁是调用者?我们啊。谁是这套接口的实现者?是不是数据库厂家?这是一条接口吧,好,这个class文件在哪,这个class文在哪,以这个class文件哪,自个心里要清楚,大家要清楚,行,咱们开始模拟吧,模拟啊,这个模拟模拟一下啊,我先当一下扇行吗。我先当一下散啊,我是散啊,现在我是散,公司现在啊,看好了,我干啥呀,在这干啥呀,定什么就行了,这个角色是上公司的角色。
02:35
三负责写这条接口。然后各大数据库厂家纷纷响应。My circle派了一波Java程序员来了,写这个接口的时间来Oracle也写也写。明白吧,那李彤老师他们怎么这么听话?
03:01
你数据库厂家要是不提供这套接口的实现类,我Java程序就没有办法连接你这个数据库,你这个数据库将丢失一大部分的用户。假如说MYSQ不听话啊,MYS就上公司写了一套接口,MYSQ这个数据库厂家就不去实现这套接口,你觉得最后吃亏的是谁?最后吃亏的是他自己买数据库,他不行,为啥呀?因为你没有写这个接口的实现类,就意味着我们将来的Java程序员没有办法去连接您这个数据库,您这个数据库将丢失掉一大部分的用户。听懂了吧,所以散公司一站出来,这个接口网站一定妥了,这些数据库厂家纷纷对这这些接口进行实现,赶都是很积极,都是赶紧的啊,对,不用收费的啊。对,他们都是自愿的。
04:01
行,你要是不提供这套接口的时间链,那就意味着我们Java永远就连不上你的数据库,难道你不知道Java在编程语言当中抬头老大吗?是不,我们的用户群这么大,我们定义好一套接口之后,你就乖乖的把这套接口给我们实现了,就完事了。我们以后写代码,我们可不关心你这个数据库是买字还是Oracle,还是DB two还是C,我要写的Java程序只写一套,我Java程序写完一套可以连连接您任何类型的数据库我都可以连接,因为我不需要关心您具体的实现,我面接的是接口写代码。结耦合呀。扩展力啊。GDPC的本质就是一套接口,这套接口的作用就是提高程序的扩展力,降低程序的耦合度,谁跟谁的关联耦合降低了,我们Java程序再也不需要关心您的品牌是哪个数据库了。我关心你是哪个,不用管。我关心这道接口就行了。就喝呀。
05:03
是吧?就像我生产电脑的主板一样,我需要关心你的这个硬盘是西部数据的硬盘还是?别的。硬盘或者是金士顿的,我需要关心吗?不用,为啥呀,有接口。你生产完插上去就能用。怎么的,我给你生产一个主板,专门适合你这个西部数据的,或者说我专门适合你这个金士顿的。不行,我们必须降低程序的耦合度。就像我们的U盘一样,我们生产完这个电脑,我们可以插任何类型的U盘。任何厂家的U盘,我不需要关心你这个硬,这个U盘是哪个厂家生产的。我给你留个U口不就行了吗?所以我生产这个电脑的时候,我是不是遵守了一套接口啊。
06:00
接口的具体实现,你自己干,金士顿你就自己生产你的,对吧,或者你别的厂就生产你自己,但是您生产的那个U盘的那个接口,你必须得也得遵守。就是这样,那现在呢,我的角色啊,我就发生了改变,我现在我当一下MYS口啊,我是买S扣的,这个这个专家啊,买SQL专家现在干啥呀,乖乖的啊,叫啥买Sq吧,干什么干什么呀,实现什么GDBC吧,都知道一个类实现接口,就要将接口的方法加以实现啊好,这块我们先写上这个叫做MYSQ的数据库厂家啊,负责编写JDBC接口的什么实现类是不是来怎么写public VO get,什么connection是不是怪怪的,就写这个方法了,你不写就报错呀,你不写就报错呀,是不是你现在就实现这个接口,你就把这个方法写了,然后C怎么点out.line打印输出啊,就说我们叫做连接什么my circlel数据库成功啊,具体这个。
07:11
代码,具体这里的代码怎么写?没关系,对于谁没关系,对于我们Java程序员来说没关系,这段代码涉及到数据库底层实验原理吧,这段代码涉及到涉及到哪买circle底层数据库的什么实现原理?好,那我问你,My circle现在做了这件事,Oracle公司是不是他也得赶紧的听话呀?他很听话啊,他写了一个什么呀?Oracle实现这套接口,但实现这个接口方法是不一样的。对吧,只不过实现原理不同,可能连的是什么数据库啊,Oracle数据库,这是什么厂家呀?Oracle的数据库厂家吧,能理解吗?然后接下来再往下呢,诶,我们还有别的数据库厂家,比如说我们的circle server,对吧?Circle server现在呢,也是一样的,Circle server的这个数据怎么样,Circle server数据库怎样,也在这写了circle circle去实现什么呀?GDBC,然后无非连的具体的数据库,就不是买S是谁啊S,诶server的这个数据库连接成功了,就是这样,他们呢,就是散公司负责把这套接口规范定出来之后,各大数据库厂家对这个接口进行了实现,好我问大家问题,这叫啥?还记得吗?
08:43
实现类被称为啥驱动,这是什么驱动?买驱动好,各位,这个是不是Oracle的驱动?这个就是circle server的驱动,各位各位啊,您可千万别较真儿啊,驱动就是他们起的一个高端大气上档次的名字,您别多想啊,这些驱动指的就是什么?一大堆的点class文件,您这个编译之后是不是生成class文件,生成了一大堆的x.class然后y.class然后c.class d.class最后打成一个收成什么什么点架包。
09:30
听懂了吧,这个价包当中有很多什么点class,都是对JDBC接口进行了什么实现?他就是个名词,叫驱动。啊,好,各位,那现在轮到谁了,角色换了啊,这个角色是sun,后边这个角色是my circlele,这个角色是Oracle,这个角色是circleq so,就差谁了,就差我们Java程序员,我们Java程序员需要关心你是买or还是server吗?不用关心,这是我们Java程序员,Programmer public class Java programmer。
10:12
Java程序员public,我们是不是永远都写问方法去调用短语就行了,是不是好这个角色变了,各位这个角色啊,这是加va程序员角色或者角色啊,程学角色不需要关心具体是哪个品牌的数据库,只需要面向JDBC接口写代码,这叫面向什么?对,又这个思想啊,面向接口编程,面向抽象编程,不要面向具体编程,如果说你要关心的底层是Oracle或者是MYS,就相当于是面向具体了。
11:02
听懂了吧,好,那么接下来这块明天接口变成怎么写代码,JDBCJDBC对吧,这是接口吧,接下来我们JDBC接口调顶方法就行了,我只需要关心这个JDBC接口里边有个什么方法来点开,里边有什么方法叫get,什么connection,接下来点get,我能点出来一个get connection就妥了,这是我写的代码,我不用关心底层具体是啥。什么数据库我不用关心。听懂了吧,好,这个位置是不是得扭啊,扭谁啊买色好,接下来我们编译一下各位。连的是MYL对吧,如果说我下边代码,我下边代码需要改吗?以下代码都是面向什么接口调用方法吧,不需要修改吧,不需要修改,我只要把这一行代码我改成别的驱动,我是不是就可以连上别的数据库?
12:12
如果我把这个改成SQL server,那我再去编译,再去运行,我连接数据库是server数据库理解吧。你想做的更好一些怎么办?创建对象能不能通过反射机制?能不能创建对象可以通过反射机制啊?对吧,好怎么做。class.for name,然后括号里面填什么类名,类名是谁啊?My circle或者是谁circle circle或者是谁,Oracle,总之这个位置是不是写个类名,这个类名其实就是谁就是他呀。
13:01
对吧,好,那么接下来大家看啊,返回一个什么class了,Class返回之后C点就什么instance返回一个什么就行了,Object好,这个object是不是GDBC能不能做强软能不能。为啥能做强转?因为你Oracle实现了哪个接口JDBC,你的买也实现了JDBC,你的server也实现了JDBCJDBC就是个父亲。他有三个儿子呀,这个是个儿子,这是,然后这个是不是也是啊,这个JDBC是不个父亲呢?所以我问大家,在这个位置,我们通过反射机制的class c.new instance创建出的这个对象是不是一定是C类型?你想象啊,这这个new instance创建这个对象,你默认情况下反馈的是一个object,但是我问你在运行的时候,它反馈的是什么。
14:06
如果是Oracle这个位置房子是谁Oracle啊,对吧?如果你这个位置是买circlele,你这个位置强转成什么就行了,MY斯,但是你写MY也不对,写Oracle也不对,但是你可以写JDBC啊,明白懂什么意思吧,有异常怎么办?是不是这样好接下来我在这Java c编Java再运行,好,现在时连成Oracle吧,把这个换成什么my sle好了,接下来我们再去编译,再去运行,我问大家是不是连在MYSQL啊,好,接下来我问你这个能不能写到配置文件里边。能不能写到配置文件当中?我的天呐,你居然不知道我要往这引JDC点什么?见过这种文件吗?这种文件咱们给它编辑一下来,这个GDP写什么?DB行不行?或者写class行吗?写Oracle行不行?好,这个KY写上这边怎么办?
15:21
把这个给我读出来来,这是个啥类名?类名怎么读?这是个Oracle对不对?这是谁?My circlele吧,这是不是个类名?好那么接下来我问你这个地方怎么动态获取不配文件怎么读result什么啊吧没忘吧什么吧,点什么盖的什么帮头吧好,这个位置写什么。这个叫做GDP。
16:03
是不是好,那么接下来这个位置是不是写GPK就行了,好resource这个东西需不需要导包,是不是导进来,导进来之后接下来帮豆有个方法叫什么。好像盖吧,我印象当中是盖顿啊,这个位置跟K吧,访问什么VALUE6吧,好,这个位置是不是删掉,这个K是谁,从这个配置文件里面能不能复制。难道是不是class name class name好,我问的呀,是不是就是它,是不是就是它,它将来是不是就放这了。懂什么意思吧?好,那么接下来这一块我们再编译连二成功了吗?以后价格价码改不改不改,改谁配什家改成谁买circle来再去编译,大家看不用编译了,直接怎么着运行需要编译吗?不需要连接数据库是不是买circle,将来把配置文件给它改成什么?诶S什么server妥了,你剩下什么也不用动连的数据库自动连的就是SQ server数据库。
17:25
懂什么意思吗?哎,我这个例子想给你演示的是什么?各位,我们还没有开始讲JDBC的API,我们还没有开始讲JDBC上个公司定的那套接口,我现在给你模拟的是JDBC本质,这是杜老师充当了三个角色,哪三个角色,第一,加发程序员,第二,公司,第三,数据库厂家。听听懂了吗?这个程序我希望你能够理解的是JDBC就是S公司制定的一套接口,我们以后Java程序是很幸福的,为什么?因为我们不需要关心底层数据库是啥,我们永远都是面向接口去调方法,接口去调方法我们不需要关心的,不需要关心底层具体的实现。
18:16
明白。好各位,这个大家呢,好好去理解一下。JDBC是一套接口,这套接口有很多实现,MYSQ对JDBC实现,AC可对JBC实现,SQL也对BC实现吧?好各位,现在我再问大家,如果一个程序没有实现类,这个啊,这个还有谁?这个全删掉,哪些没有了?实现类没有是不是驱动没了?驱动没了你懂吗?驱动没了这个程序能运行吗?
19:11
Not found exception,没找到哪个类。你这个配置文件里面配的是这个类名,他将来是不是找这个类去了,这个类是不是就是驱动,所以我问大家一个问题,驱动是不是非常重要,没有驱动JDBC程序。没法运行,但是能编译吗?诶,同学们,我问大家个问题啊,JDBC写这段JD bc Java代码,我们这段Java代码。这是JDBC代码吧,我们写这段程序,在编写程序的时候需不需要是需不需要这些实现类,需不需要驱动。需不需要,不需要,因为我们面向什么接口写代码,编译器能编译通过,不能,但能运行吗?运行不了,为啥?因为真正运行的时候就会跑到实现类上面。
20:08
因为运行的时候,它真正调方法是不是真正执行的,还是底层有啥对象就调哪个方法呀,所以最终还得跑到实现类上,实现类它是驱动,所以说驱动你要没配那妥了。就肯定是不行的。
我来说两句