00:00
好,我们接下来呢,需要创建JD bc us这个工具类。啊,因为我们需要用这个工具类啊,帮我们去获取数据库连接,同时呢,释放数据库连接用的也是它,诶首先呢,先别管那么多,咱们先把这个类呢给它建出来。在我们Java下边啊,找到我们工具类呢,放在U下边。哎,然后我们这边呢,来截个图。幺零。好完了,那说这里边儿这怎么写呢。
01:03
哎,这个我们这么看哈,咱们先说啊,这个类里边呢,它是一个什么样的功能啊。这个类呢,我们要实现的功能,第一个功能。要孤男寡女功能一啊,就是说呢。嗯。呃,从数据源获取数据库连接。功能二这个呢,是将。数据源绑定到本地线程,也就是这个。Sri的local啊,借助借助于ride local啊,现成本地化技术技技术,呃,第三个。呃,这个释放数据库连接的时候啊,和本地线程的去解除绑定。
02:11
哎,呃,具体来说呢,体现体现为三个部分,第一个部分呢,咱们是去创建这个数据源这个对象,然后后边呢,在获取数据库连接的时候,从数据源直接拿就行了。第二个呢,就是说我们提供一个工具方法,获取数据库,获取数据库连接的工具方法,第三个就是释放数据库连接的工具方法,哎,咱们先考虑第一步啊,我们在这儿呢,得有一个data source,哎,数据源的这样一个对象。现在还只是一个成员变量哈,这个数据源现在还只是成员变量,还没有初始化。然后呢,我们说下边都是静态方法。
03:00
静态方法呢,呃,你访问不了非静态的资源,所以说它呢也得设置成static啊,工具方法不都静态的吗?另外呢,这有一个还有一个事儿,一个好处就是说这个资源设置成静态的以后,它就只有一份的,哎能够保证呢,它是这个。呃呃,这个像这种数据源这种大对象,保证它只有一份,保证它的单立性。哎,说它呢,设置为呃静态资源,保证大对象呃的单立性。哎,呃,同时保证静态方法中可以这个访问下边呢,我们就在这个静态的代码块中。来对这个数据源进行初始化。
04:06
哎。在这儿呢,怎么进行这个初始化呢?你想哈,数据源呢,就帮我们去连数据库的,那连数据库肯定要读取数据库的信息啊,就是读取数据库信息,信息呢我们保存在gdb pro这个文件里边。所以说首先呢,还是得从J6PROPERTIES文件里边啊,把我们这个连接数据库的信息呢,得给它读取出来。哎,从JDBC.properties文件中读取。连接数据库的信息。在这儿呢,我们需要注意这么一个问题。说呢,我们去去读这个文件,并不是说你简单的哈,非input stream啊,然后这样去去读,你在这儿呢,我们给一个具体的路径哈。
05:04
哎,因为你要是new file input stream的话,你就只能是是吧,用它的绝对的物理路径来进行一个读取。但是现在这个问题是呢,你想我们这个路径只是在我们本地是这样的。我们要是把它呢,部署到服务器上,这个路径就绝对不是这个路径了,所以说肯定不能这样写死啊,我们得考虑到它得,呃,有一个。可移植性才可以啊,必须得有这样的一个可移植性,也就是说呢,为了保证我们这个项目是可移植的,哎,在本地运行也对,在服务器端运行也对,那么我们得让它呢。动态的获取啊,哎,动态获取呃,就是说我们得保证它根据一个确定的基准来读取这个文件,这样的话就有就有这个可疑之性了,哎,为了保证。我们程序代码的可移植性。
06:03
哎哎,需要基于一个确定的基准来读取啊这个文件。什么样的基准算是一个确定的基准呢?哎,就是这个类路径的根目录,哎,不管我们在本地运行,还是在服务器端运行这个,呃,我们resources这个目录下边的资源经过我们构建之后啊,比如说你执行打包的操作。这个目录下边这个这个目录下边的资源都会被放到我们绿路径的根目录。Re CES啊,Resources目录下的内容,哎,经过构建操作后,啊,呃,构建操作中的打包操作后。
07:00
哎,会确定放在。我们内路径。那路径是谁呢?就是在我们web info下边。有个目录。哎,那么我们web info下边的这个classes目录。那就是存放的。它存放的就是我们编译好的Java的自解码文件。哎,Class自解码文件啊,星点class这样的字解码文件,哎,当然我们resources目录下边的这些个配置文件也放到这个目录下边了,那么我们就称这个目录呢,就是哎,就把它称之为是列路镜。哎,成V类路径这个目录呢,它就是说呢。这个呃类路径说,无论在本地运行还是在服务器端运行,都是一个确定的基准,哎,这样的话我们就放心了。
08:13
所以说下边呢,得从内路径呢,去读取这个文件啊,这个那怎么做呢。那么我们就首先第一步啊。下边这个刚才说的这些呢,是一个我们的一个操作的一个思路的分析啊,接下来呢,下一步。哎,就是说我们操作的这个具体的代码,具体代码里边的第一步啊,我们先要去这个获取当前类的类加载器。用我们类名加class,得到当前类的对象,然后呢,再get class load,再get一个resource as streamam。
09:03
诶,然后呢,Astream这个方法里边哈,哦对了,列加载器还还不到这哈,哎,这就是我们的类加载器class,然后呢,通过类加载器。通过类加载器对象从类路径根目录下啊去加载我们的文件,或者叫读取文件class load.get resources asre。这个时候这写的路径呢,就是以。类路径根目录为基准的一个相对路径。啊,因为我们这个文件就在类路径的根目录下边,所以直接就写它就行了。诶。然后返回一个输入流,嗯。就叫吧。
10:00
就叫4G。好,然后呢,得到这个输入流以后,诶,我们想办法呢,需要把里边的数据呢,给封装封装起来啊,这是这就是我们这个,诶需要用到一个能够封装属性文件的一个类啊,就是我们property。哎,下一步呢,就是使用我们这个properties。Properties类封装。我们属性文件中。的数据,所以说呢,得先用一个properties。诶,然后呢,调用properties,它的一个get property。就是叫做一个。呃,漏的。哎,调这个漏的方法里边可以传输流,传入我们这个stream。当然它有一长。呃,有异常的话呢。啊,这静态代码泡这个,看看能不能抛到外边去。
11:02
啊,他也不让你跑是吧,哎,你只能是踹开始,所以说呢,我们就把整个这一块呢,咱们全都放在踹开始里边啊,全都放在圈里边。CTRL加T。嗯,然后呢,一个六吧。啊,拆开就行了啊。哎,去加载加载呢,然后加载完了以后啊,这个流里边对应的这个文件就进入到我们properties啊这个。这个对象里边的,然后呢,下一步呢,根据pro这个对象,我们再来创建我们的数据源。第四步啊,就是根据我们的这个。Proper case对象啊,因为现在呢,执行到的他已经封装了数据库连接信息,哎,根据它来创建。我们的数据源对象。
12:02
这个时候呢,我们需要用到一个哎,德鲁伊数据源啊,创建对象的一个工厂ID的data。然后呢,再去调一个方法叫create data source。你看这个时候有一个方法可以穿properties。哎,返回的呢,是我们data source这个呢,当然赋值就赋给我们这个静态的成现变量。哎,这有一场哈,给它添加到我们的这个T开这个里边这。哎,当然你也可以把这两个简化成一个啊,也都可以,这个这个不是很重要。这样吧。我们还是处理一下哈,给它合并成一个啊,合并成一个,合并成一个以后呢,在这儿哈,如果它真的没有连上。啊,就这真的是在这个连我们数据库的时候出了问题,我们在这儿呢,Through有一个runtime exception。
13:07
把这个E呢给传进去,这个是为了什么呢?为了不要掩盖问题啊,为了不要掩盖问题,为了避免在真正抛出异常。后嗯,菜式块。捕获到异常,从而掩盖问题。哎,那么我们这里这里叫锁。补货到的异常。诶,封装为运行时异常继续抛出,不然的话你抛一个异常开一块抓住了,哎,这个1.printsta控制台一打印,可是你如果没看控制台的话,你就不知道这出了问题了,这个问题就被掩盖住了啊,所以说我们还是封装成一个运行时异常的再继续给它这个抛出去啊。
14:14
哎,不要掩盖问题啊,因为我们得知道得真的得异常抛出去啊,我们才能够最后才能知道真正抛的是什么异常,才能有针对性的去解,去解决问题。好嘞,代码我们是写完了啊,那这个代码写的对不对呢,还得经过测试才会去知道。
我来说两句