00:00
OK,我们来看接地BC,我们首先呢来看这样的一个词,叫数据的持久化,数据不用说了啊,就程序里边的数据呗,那什么叫持久化呢?持久化,把数据保存到可调电式存储设备中,以供之后使用。言外之意就是说,哎,我关机了,我这个数据还能在硬盘上,我开机之后的话呢,我还能从硬盘上把它给读出来。数据持久化意味着内存的数据将保存到硬盘上加以固化,那我们固化的这个媒介有什么呢?我们可以有几种方式是吧?看一下。数据保存到这个,呃,存储介质可以是文件,比方说通过L流是一个T文件,或者是一个X码文件是可以的,乃至于是一个。
01:00
我们往往玩那个单机游戏,你包括我们安的这个买circle它的一些呃,最基本的配置信息,比方说像端口号啊,像这个编码呀,实际上就是在那个。卖点,Ii那个文件,那个ii是一个属性文件,还可以是什么呢?还可以是数据库,也可以是其他的东西,那么我们通常情况下,我们进行企业级开发的话,这个持久化的媒介都是关系型数据库,我们可以通过circle跟PL circle进行。高效的去处理关于数据库里边的数据。所以说进行企业开发的话呢,大多是通过关心数据库来完成的。啊,Java中数据库取技术呢,可以分为几类,一类BC直接访问数据库,我们后边我们还看见比方说这个g do啊哈啊等等等,那么他们都是以JDBC来作为。
02:07
底层的底层时间都是JDBC,所以说JDBC非常重要,那同学后边学了哈弗练之后的话呢,可能会说是吧,哎,我有了哈弗之后,我发现用不着JDBC啊,但实际上harmlet的底层还是JDBC,当我们处理一些比较棘手问题的时候,我们可能还得在harmlet里边去访问JDBC的API,比方说harmlet去调存储过程函数,就得通过嗯,里边暴露的这个JDBC的接口去调用。JDBC是Java访问数据库的基石,那么j do hale,包括iab只是更好的封装了JDBC。那GDBC是什么呢?这边我们初步有一个印象啊,说JDBC是访问数据库的一种技术啊,具体说说EBC啊一个。
03:02
独立于某种数据库管理系统通用的circle数据库存取和操作的公共接口,说白了就是一个API。一种API是什么东西啊,应用程序接口就是一种类和一种方法,就是我们通过呃这种类和方法可以去访问数据库。可以发送SQ语句对某一条记录进行更新,可以发送SQL语句获取一组记录,这就是JDBC。GJBC定义了用来访问数据库的标准Java类库,使用这个类库可以一种标准的方法方便的访问数据库资源。JDBC为访问不同的数据库提供了。统一的途径。提供了统一的途径,一会儿我们会看到这块的话呢,我们会有一个词叫面向接口编程,为什么有接口,为什么是面向接口编程,我们一会儿讲啊,JDBC的目标是使账号程序员使用JDBC可以连接任何提供了JDBC驱动的数据库。
04:13
然后的话呢,我们无需对数据库系统的底层有了解,从而大坝的简化和开发了,呃,和这个加快了开发过程,就是说有了JDBC以后,你后边无论是买circle还是or口,还是这个circle server还是DB two,我连的方式都是一样的,操作的方式都是一样的,你爱是什么是什么。那我们看吧,这个图的话呢,我们在讲接口的时候曾经画过一次,说最上面的话呢,是一个障碍,应用程序底下是一个一个数据库,我如果没有JDBC的话,我怎么连呢?我得通过Java application一个一个去连数据库,因为这个时候我Java连买circle口连or口连circleq s林DB库连接方式就应该是。不一样的,因为这是完全不同的数据库厂商,我说哎,我连买circle口需要五个步骤,两入口可能只需要三个步骤,不一样。
05:08
那不一样的话就麻烦了是吧,我连每个数据库的方式都不一样,这就意味着对程序员的要求,你这每连每一个你都得非常清楚怎么连,而且当我以前用的是免费的这个买circle口,现在的话呢,嗯,觉得买SQ不够用了是吧,我给它升级到Oracle,我需要把底层连接输出在哪,我需要重写,所以说也不利于程序的重用。什么叫重序的重用啊,从我以前连买circle口的照样可以连凹口叫重用,我如果以前连买circle口的到奥龙坡这块不行了,我也重写,这就叫不能重用,那我们当然希望。程序可以得到重用,怎么办呢?这么一个,在数据应用程之间加了1GGC,实现是这样。
06:05
就是说Java直接向JDBC编程,JDBC给我们提供了一种接口和一种方法,直接向这个编程,而my circle Oracle circle server DB two提供这种接口的实现就可以了。这块实际上用的是个什么呀?用的是一种多肽。看一下啊,它给提供了一组接口,我这碍应用程序只需要面向这种接口编程,但是这种接口是谁实现的呢?不知道。不知道,只要你提供了这组接口的实现,我就可以连这种接口的实现,既可以是买circle口,又可以是Oracle,又可以是SQL server,又可以是GB two,还可以是其他的。反正只要你这个数据库想支持Java语言访问的话,你必须提供JDBC这组接口的实现,这种接口的实现就叫就叫JDBC驱动,好吧,我们看一下这样一个图吧。
07:15
好,我们看一下这个图说Java呢,调用JDBC这种接口,然后的话呢,各个JDBC的这个呃接口的实现,呃,各个数据库厂商来实现,过程是这样的,Java调用JDBC,然后各个厂商提供GDPDD主接口的实现。然后呢,这个接口的实现,再去具体调每一个数据库,这是整个的流程,那我能不能让Java应用程序绕过这个JBC直接去访问数据库呢?当然可以,不过这样做的话呢,不建议这样用是吧,因为这个这样的话,这个Java程序,Java应用程序就没有更好的可移植性了,所以说我们不推荐这样做,但是可以这样做。
08:02
看下一个图jdbc API啊,发两个层次,一个是面性应用的,就面向咱的一个API,然后呢,嗯。这种API的话呢,实际上就是一种接口。我们只需要面向这种接口编程就可以了。还有一层是面向。数据库厂商的,就是说你要是想支持Java的话,必须提供。我这套接口的实现,你只要凭这种接口实现的话,我就可以来用这种实现去访问数据库了,那我们具体看一下。看。Connection connection呢代表一个数据库连接。大家看connection是里边的一个接口,我们从这里边看是不是没有提供这个接口的实现啊。啥意思啊,List list我们知道它也是一个接口吧,是不是写啊,这个接口的时间内都有什么吧,有一个说list,而我们的connection仅是一个接口,它没没有提供这个接口的任何一个实现,谁提供呢?
09:15
各个数据库厂商提供。但是我们只需要面向这种接口编程就可以了,那具体厂商提供其具体的实现类。这不就是一种多肽吗?我在程序里边用的是啊,Circle包里边定义的是connection,但我实际上这个对象却是数据库厂商提供的。实践的对象。那因为你已经实现这个接口了,所以说你就提供了每个方法的具体实现。那我们看看这个JDBC驱动啊,什么叫GDBC驱动呢?就是提供了。
10:05
啊,实现了我们呃,面向厂商这种API的这个实现类,这就叫JDBC驱动程序,各个数据库厂商根据JDBC规范制作的JDBC实现类的类库,称之为JDBC的。驱动都提供了,那JDBC驱动呢,一共有四种类型,我们直接看第四种叫本地协议的纯Java驱动程序,你直接看这个。它是看我直接什么Java应用程序,通过gdbc API,然后通过GDBC驱动去访问数据库,这样就可以访问。本地协议的纯Java驱动程序,Java应用程序,通过jdbc API,然后去访问JDBC驱动程序,然后去访问这个数据库啊这样实现,那好吧,下面我们来看一下整个这个jdbc API的这个层次关系,最顶上有一个叫drive manager,注意哈,这个不是什么呀,不是这个可以分为这个,这个箭头是两面的,通过drive manager我们可以获取到。
11:20
代表数据库链接的connection,通过connection我们可以获取到用于执行circle的statement,通过statement,通过statement我们可以获取到代表查询结果的result set,这就是嗯,一种实现。当然了,我们这块还有一个prepareable statement跟Co statement,在我们讲课的时候呢,我们也会讲这个,嗯,执行circle的这个是预编译circle,这个是调用函数跟过程。好了,下边呢,我们就想写一个程序吗?写一个程序首先呢,我们来介绍一个接口,这个接口叫driver,这个driver接口啊是。
12:05
所有数据库厂商必须实现的接口,数据库厂商要实现这个接口的话,我们就可以从这个接口里面获取到。具体的connection就是具体这个连接就叫我们什么叫Java接口,我们程序里边呢,不建议直接去访问这个接口,我们为了说明这个问题的话,我们先来访问这个接口,看一下具体是如何通过driver获取到connection。来吧,新建一个,照工程几天。第17天啊。创建一个包看点,哎,A股点PPC。
13:04
优点三,测试类接DBC。第一个test driver。首先呢,我们要说一下这个是什么啊,是一个接口,看看这个接口啊。说driver是一个接口,大家看driver是一个接口,它是什么呀?就是每一个驱动必须实现的一个接口,在我本地没有提供这个接口的任何实现,那我怎么用这个接口啊,我是不是必须得。知道,比方说我连买circle,我就得看买circle是如何实现这个接口的吧,于是我们使用它的话,首先哎是一个接口是什么呢?数据库。
14:05
厂商必须提供实现的接口。那什么呢,能从中其中。获取数据库。连接好了,那既然这样的话,这边有一个问题是吧。有啥问题啊,你你既然是数据库厂商给我提供时间,那个时间在哪呢?那就得我们具体得把那个驱动加入到当前的这个,呃,应用这里面,好了,我来新建一个文件夹,叫例。我要放什么呢?我要放ADBC驱动程序,那我们找一下吧,Open source,这里边放的都是一些第三方的价包,我找到买。
15:07
My my connect Java发给大家。不是有人没睡着吗?接完之后的话呢,注意哈,这是一个jeep jeep这个包Java是不认识的是吧,给他解压,解压之后呢,变成这样,这里边儿有一个什么呀,有个有个点价文件吧,把这个复制到我新建这个滤目录下。好了,复制好之后,你说我现在我这个价包会跟当前这个项目发生关系吗?我紧着往这一放。这不行吧,这不行吧,你就像说,哎,他就给我挂电话,说老师我来百度了,我很高兴啊,我说好好事啊,我我说你怎么样,他说我现在在百度,百度大堂里边呢,是吧,被保安给拦住了,我说那你也没跟百度发生关系啊,他说是啊,我来面试啊。
16:08
就是你应该是你跟百度发生关系的话,应该是什么呀啊,你不但来百度,而且百,你要把你的这个比方说像什么呃,入职手续啊,那这些流程你要走,他给你交保险,给你交公积金,这个时候你才是百度的正式一员,所以说怎么办呢?我需要右键把它加到当前的类路径下,Build pass at To Build pass加到类路径下,点一下看,这个时候加了出现这样的一个小奶瓶,叫010,这个是二进制嘛,这个时候就加进来了,好了啊。然后我们又提了一个,提了一个点哈,加入SQ驱动,具体两个步骤,第一步解压。其谁呢?解压这个文件。
17:05
也要买SQ的一个驱动程序,这个点记住。买。M打头。加他。然后呢,在当前下。新建一三。啊什么呢?一定要注意哈,不是地图文件,而是这个下边的一个文件。
18:01
我。下。把这个。把这个复制到立左下,但是这样一复制的话呢,并不能说明它已经加到微路径下了,然后的话通过右键。Build pass I To Build pass才能够说给它加到了当前的内路径下,然后右键。你点啥呀,你都怕。I could。达啊,然后呢,爱具体的这个这个名称我记住了,I to pass差不多到站。
19:14
加入到内陆。嗯,下好了,写完写完之后呢,我们说呀,我要用这个driver去获取数据库连接,于是我们看看着哈。Driver v。这是接口吧,接口。等于提供实现的是。购买搜提供的是提供的实现呢,我前面这个接口你这样写写不了吧,你这样写完之后它是个什么情况,你这不也提供所有通网实现呢,我我们不知道怎么实现,所以说你这块写专文的话,应该是用什么呀,买circle给你提供的这个实现类吧。
20:02
好,有异常往外抛,不管它,然后呢,获取完之后我们来获取数据链接会点。Connection它需要个什么呢?连数据库的话,需要一个URL,还需要一个practice对象都放着string URL连买circle,需要一个ul,还需要一个proper in for等于new proper好了,好之后的话呢,它可以得到一个对象。嗯。Action接口哈,等于它然后。好了,这里边有两个问题需要解决。第一个问题,Ul怎么写,往后看啊。Ul这么写JBCUUL呢,由这样的几部分组成,第一个JDBC,第二个子协议,还有一个是呃。
21:08
子名称我们直接来看,往这看,JD bc my circle,这是子协议后的子名称,它是什么呀?主机IP吧,我是本机127.0.0.1logo号都可以,端口号3006,我连的数据库名叫test来来ebc my circle。127.0.0.1封口号。3306数据库名。好了,我们需要清楚每一个都是什么意思啊,这个固定的,这叫子协议买色口,然后呃,冒号两个斜线,这个是我。我数据库所在的主机IP吧,我也可以去连你的,连你的那个IP就是你的IP地址,当然我这个我也可以设为我目前的IP地址也可以,这是端口号,这个是数据库名,好了,这里面需要写什么呢?不知道。
22:16
看什么呀,看把它待会的这个connect connect connect,看这proper proper圈有什么呢?有一个优跟password版。好了,我写一个来in for。优。不。点。什么呀,Pass来1230好,写完写完之后的话呢,我们看能不能连得上右键跑起来。
23:03
Unit。第四。等一下没连上。为啥没人上呢?他说连接失败了。好长啊,复制出来吧,Copy。他说什么呀,不知道这个127.0.1是吧。这不是我的主机IP吗?127.0.0.1跟那个是一样的。啊行,这个这个成功了啊,我通过local host可以连接成功,大家注意这个connection是谁呀,我这块写的这个connection应该是接口吧,这块这个是什么,是不是买so给我的这个具体实现啊,那有了connection以后,我就可以对这个数据库里边的数据表进行天删改查操作。
24:20
I did to drive。好了,我们看一下driver,我第一步呢,因为我需要通过driver去获取数据库链接,可以通过可以通过driver的实现类对象获取数据库连接,OK,那我就需要先创建一个。Driver实现类的对象。其一,第二呢,要用。
25:03
Drive接口的什么方法啊?有一个URL后有个音符获取数据库链接好了,实际上还有一个,还有还有一个什么呢?这我们专略二叫什么准备。准备连接数据库的基本信息,具体哪个ul,还有一个是。啊,User这么写吧,User还有password,那newl呢,是以一个字符是一个字符块存在的,Proper是这个user跟password是以一个property对象存在的,好了这样获取,诶我们觉得还行。这个是第。
26:02
啊,这就是使用不可使用直接去。获取connection,有了connection之后,我们就什么都行了。我这个连接已经建好啊,这个基础上什么建表啊,删表啊,包括什么这个呃,获取记录啊,更新记录啊,删除记录啊都可以都可以的跟大家看哈,我这个方法写完之后的话,它有什么问题吗?这个问题就是什么,这里边儿是不是紧密的跟这个实现类型耦合呀,哎,回头我想去连Oracle的话,我发现这个程序需要重写吧,我们讲了,我们想写一个通用的方法,它可以。在不修改原文件的基础上获取任何的数据库链接,我们的需求是就是这样的哈。编写已告。
27:06
编写一个通用的方法,然后呢,在不修改原程序的情况下,可以获取任何数据库的连接,我们想干这么一个事,好吧,那我们看啊,在这个里边第一个问题,这个你不能你不能拗吧,你一拗是不是就写死了?是吧,还有一个ul password,你不能写死吧?啊,怎么解决?解决方案怎么解决啊,你既然说我们可以写一个方法,他。可以去连任何数据库,而且不修改原程序,那我怎么办?那我连接数据库这些基本信息我就得放在一个配置文件里边吧,你不改原程序的话,你得改配置文件,如果什么都不改,你如果想那肯定不行。
28:13
所以说我们怎么办呢,以及方案把把什么呢,把数据库。驱动不是驱动是什么呀,实际上是driver实现类的全类名,以及以及什么ul以及。优以及。二味的。放入一个我们配置文件里边吧,配置文件中通过。修改配置文件。的方式实现。
29:00
实现和具体的数据库。第。写出耦合,哎,我们这么干好了,来写个方法,大家看啊,对不起,叫public。Get过来,我说呀,我的目标是返回一个connection,那我们看啊,具体步骤呢,是一样的,比方说我现在我已经有了第一个叫driver us等于now。还有一个string。GDBCUUL等于now,还有一个是string等于now,还有一个string pass。或等于now好了,比方说我这四个现在已经搞定了,那我后边我如何去连数据库啊。第一个还是要的driver等于等于啥?
30:05
我这块是new的吧,对吧,记得我不能new了,但我是不是知道这个全类名啊,我我可以怎么搞啊,我搞反是吧,Class for name class.new就是反射,它可以充充分的让它解耦。嗯。对,没问题,好吧,有异常我好。直接抛一个exception这啊。好,第一个搞定,第二个呢,或者我们刚才已经看了啊,第二个我要获取一个。等于driver property。
31:02
Ul已经写好了,那我就。那我就写呗,叫JDBCL,然后写什么写properties for等于new proper你就写吧,In for.put注意哈,这个见这个必须得是优哪写的,这写的呢?键必须得是U,这个键必须得是password,不,不能随便改,但值我可以改,于是我这块写成U,后边这就是U来in for点兔。有。点这个叫passor,这个叫passor OK return,来大家看,诶我这个方法目前他是不是没有跟任何一个数据库厂商的API相合呀。
32:05
度数没有啊。大家看,如果我这个driver c password从一个文件里边读出来的话,你看我这个driver是接口吧,是接口吧,后边是反射吧,Proper是照SE里边的一个类,Connection是接口吧,返回也是接口的这个呃,是这样的一个变量,这样写的话呢,这个方法就没有跟任何一个数据库的API相耦合,那这个时候这个方法就是。通用的,而这个方法不是,它不是,而它是通用的,哎,我们希望我们能够写出更多通用的代码,那好了,那信息你还没放呀,怎么放啊,于是我在根目录下新建一个。
33:01
下对src下吧,新建一个叫GBC点,于是driver等于com点买circle.dbc点。陈立明,Jdb CU等于JBC。买circle。Localhost。3306,再把case这个数据库U等于八四,Word等于1230写完好了,就把这个,把这读径就可以了,于是我们看读取泪路径下的GDBC点。这文件这我们可以搞定的,怎么搞呢。
34:04
比方说我们就是base吧,Get class.get class order,还记得吧,Get resource as。名叫DBC,点这是一个输入流。他,他。In等于它,然后呢。然后呢,等于new。以前讲过啊,Proper点吧,不然后一个一个写吧,Driver class等于prop点。
35:01
也就是叫driver driver。这会没有class哈,下一个。U lub c Lu等于pro点吗?PP curl看哪个呀。说看这个,那这个就跟刚好一样,女主这样写下一个叫等于properties.bag。Build下一个pass word等于proper.get proper as这个。差。Eight。
36:02
直接打印。有一长往外抛看效果。没问题吧,这是买circle同,就说你通用吗?我们试一下Oracle就可以了,Oracle数据库我是开着的哈,我拷入Oracle的驱动。包龙头安装在D盘,美的D盘、白盘D盘。这地盘呢,口对口10.1DBDB。GVC。如果ORLE12。
37:00
点价价包的话,第一个就可以复制。过来。站到这个下边。加入。Bud past。然后修改它。这个名呢?怎么改orc的or我也记不住,怎么办呢?T,看这个吧,看这个来。CTRLT。你倒。Oracle的吗?有吧是吧,Oracle JD bc driver Oracle driver吧,是吧,它是可以搞定之后的话呢,这个需要有。等会儿啊,这个我去我去给他注一下。
38:02
也是按这个CTRL斜杠,然后的话呢。重新拍一份。这看第一个叫or口点GBc.driver.or口driver,第二个g bc driver。好了,第二个呢,你可以来看看我的这个长成这样。You see five。A dpc Oracle sing local。1521,这是or CL CL数据库吗?这是。这个是删了啊,我在只修改配置文件的情况下,看一看这个链接是不是改了。
39:00
是不是是不是绒的绒的链接了,我再把这个再弄掉,把这个。打开再看。购买SQ啊,哎,这就是一个什么,一个叫解偶的程序,我们直接通过修改配置文件的方式就可以啊,灵活的去获取不同的数据库链接。好,我们归结一下啊,我们归结一下,我们首先呢,我们讲了这个这接口。那具体实现是创建一个driver接口时间链对象,然后通过其connect耐的方法获取数据库链接。connect耐的方法里边需要两个参数,第一个URLURL呢,你可以上我的这个里边去复制,那实际上我们在这个各个数据库厂商GTBC驱动的实现类的这个文档里边也也有,另外一个就是提供一个properties啊,User的passwor,这可以,这个是一个最简单的,这个我们不满足,我们希望我写一个通用的get connection通用到什么程度呢?
40:17
我们不把具体的信息写死,而是通过反射跟读取配置文件的方式来获取数据库链接,那具体步骤就是我首先啊上这个文件,上面来读四个信息,这class jdb CL user跟pass,然后呢,通过反射创建对象。看着啊,通过反射,通过反射创建一下,然后通过。通过什么呀。
41:02
BY的方法获取数据库连接,OK,到这块的话呢,我这方法写完了,然后我们发现在这个下边我直接进行切换,我就可以具体获取到指定数据库的连接,要么是买circle,要么是or。
我来说两句