00:00
那C天T0呢,属于联池,我们就说完了,这里边呢,讲了两种方式啊,那么大家回去要用的话呢,就用这个方式二就行了啊,因为咱们通常都会使用这个配置文件的方式,那这个完了以后呢,我们接着看下一个啊叫DBCP,诶DBCP的话呢,同样的道理,诶我们要想使用的话呢,同样呢,需要把它相关的驱动诶添加进来安进了啊,那添加进来的话呢,我们看下这个课件,诶这个呢,上面两个文件呢,是咱们下边的这个和诶这个解压以后生成的。哎,就是别看另外两个,另外两个呢,这src属于源码了啊,诶这两个的话呢,我们解压完以后呢,是这俩说DBCP啊,按说呢,应该选上边一个,但是呢,对于DBCP的呃,数据库连接池技术呢,我们需要导两个炸包两个啊一个呢是这个DBCP进来把这个啊CTRLC一下。诶粘过来还是放到咱们这个liap下,这个Li下呢,咱们会放好多哈,所以这块呢你得整清楚,现在呢,放进来叫DBCP,点右键build pass好接着接着呢还得回去,这有一个呃pro就是这个DBCP呢,要想使用呢,它需要依赖于下边这个铺,所以把这个呢也CTRLC一下,诶粘到这里边。
01:17
那这是我们这个铺啊,点右键这来一个had To Build pass行,那这两个呢,就都进来了,就进来以后我们下边呢,就可以来写一个代码来进行一个测试啊,这个class DB cp的一个test啊这呢我们来测试一下DBCP的哎,数据库连接池技术。哎,这个咱们先写个这个方法啊,Public,嗯,VO test。Get connection。呃,测试啊,DBCP。
02:01
的呃,数据库,呃,连接池技术,OK,那么具体怎么写呢?这块我们先提供一个,呃,这个说了,不管是DBCB也好,c.P0也好啊德鲁也好,这块呢,我们的一个起始源呢,都叫做诶,Data s。诶,然后呢,这个我们写个S。诶等于先是个no啊这个data s呢,仍然是我们这个sun啊定的一个哎这个具体的一个接口了啊把它导进来,导进来以后,然后呢,诶选中它,哎我们CTRLT哎这里边呢看哎那么这呢,就是它具体的这些算是事线类了啊在这个实间类里边呢,其实就能够找到其中有一项呢,叫做诶commons dbcp这个包下呢,有这样一个类叫basic data source。啊,这个时候大家要注意,一定你得先把这个炸包先导进来啊,你要不导进来的话呢,你在这块选中它CTRLT这是看不到的啊,诶导点以后我们就能看到呃,已有的这个结构当中的这个实现力了,叫basic data source,那UID呢,我们这块呢,就可以考虑右边呢给大家去new一个啊叫basic data s,当然前提呢是你得知道人家有个空单构造器。
03:08
哎,Data source啊,确实有啊,这我导进来了,那关于这个basic data source怎么去使用呢?呃,这块我们还得是考虑一下人家的这个文档啊。诶,那么回过来看这个DBCP,这呢是我们刚刚才导的这个炸包上面一个API dox啊,点开里边呢,同样有一个index,点天猫啊双击啊,它的这个呢,跟C3P0比,没有C3P0这个要好啊,它是个这样的文档,跟一本书似的啊,里边怎么做都给我们写好了,而这个呢,就像我们Java提供的一个,呃,比较普通的一个包类啊这样的一个结构了啊,那在这里边哎,我们就能看到这个叫basic data s。啊,然后点开,诶点开以后,这里边就关于这个结构的一个使用,那刚才呢,我们是用了它的一个对象,使用的是这里边所谓的叫哎空舱的构造器。行,那造完对象以后,这就相当于我们创建了一个DBCP的一个数据库连接池。
04:05
哎,创建好了啊,DBCP的还数据库还连接池了,那你创建好这个连接池以后呢,当然最终目的啊,咱们肯定是,哎,这叫s.get一个connection了,这个毫无疑问啊,哎,CTRL1啊先把这异常呢先抛一下,然后CTRL1。哎,这块我们得到这一个连接,诶打印看一下这个连接,但是呢,目前你还没有去设置它的基本信息,诶所以在这块我们需要去设置啊基本的这个诶信息了啊,你要设置基本信息的话呢,就拿着我们这个SS呢去设置啊就行,那基本信息我们在这个API这块呢,其实也能有一个提示了,上面呢就是它诶各种各样的属性。那一方面呢,与我们连接,呃,数据库里边四个基本的信息,咱们首先找一找。基本的信息。哎,Password这一个,那那我们这个属性呢,这叫password,那回头呢,你要是设置的话,是不是就set password对的啊,然后ul,诶这个username。
05:12
嗯,然后这块呢,真没有了,那那个应该过了,诶通常呢,我们考虑是不是叫driver啥的是吧?哎,这叫driver class name,诶这就我们四个基本信息,诶你就调他们相应的set方法就行,好这块我们去调一下,哎,拿着这个S,哎当然此时呢,你这块我们去set调的时候呢,你会发现可调的很少,哎因为这时候你的这个声明不对是吧?哎,我们把这个呢,CTRLC一下声明呢,改成就是叫basic data s啊哎,这时候呢,我们再去点set一下,哎,Driver。诶,Class name这个。嗯,com.MYQ点这里BC下的driver,哎,这一个啊,然后south.side一下youl。哎,这个呢是JDBC啊,My circle,哎,咱们也说了,这呢,其实可以这样写的是吧,哎,Test source,第2SET一个叫哎,Username,哎,Root。
06:13
下一个password。看一下三行,那除了这个之外呢,我们说还可以设置其他涉及到数字连池管理的相关属性,哎,还可以设置呃,其他涉及呃数据库啊连接池。哎管理的哎相关哎属性啊,那这个相关属性呢,其实就是我们这里边看到的其他的这些了。那那其他这些呢,常用的那些哪哪些呢,然后怎么用呢?呃,给大家发的这个资料里边啊,你往后退一下这块我放了一个叫DBCP.tt啊这个打开以后呢,里边有我们常用的这几个。啊引initial啊,Size啊,就是初始化的一个连接数,哎,Max active啊,最大的一个活跃数,最大的一个空间时间啊,最少的一个空间时间啊等等,最大的一个等待时间啊等等等等等,哎这是它的一些相关的属性,就相当于呢,就是我们这个文档啊,只是呢,挑了几个呢,我们哎翻译成一个中文的了,哎这种情况诶这呢我们就可以相应的啊在source诶设置好四个基本信息以后呢,我们再去比如set啊set一下叫initial size,比如我们设置哎初始化呢有十个啊,然后S点2SET一个max active最大的一个活跃数啊,比如说是一个啊也是十个吧。
07:35
那你要不够的话呢,我们再去提供就行了,等等啊这样的一些相关信息,我们就可以做一个设置它就可以了,好,那这个我们就相当于是写完了啊,尤其这四个基本信息呢,是每一个都不能出错的,那写完以后呢,我们这块呢,点击进行一个测试。在测试这块没有这个是吧。
08:03
OK,哎,这样我们就获取了,呃,DBCP的一个数据库连接池当中的一个连接,哎,这就拿到了就啊好,那毫无疑问的话呢,这应该也是咱们要讲的,只是第一种方式,那这种方式呢,我们相当于也是不推荐的啊,因为我们也是以硬编码的方式呢,把这个信息呢,就写到这里边了,这是不推荐的,然后下边我们说这个方式二,方式二的话呢,那仍然是使用配置文件。诶get一个,哎,看来是,哎这我就写个一了,嗯,那使用配置文件,这是我们看一下啊,找到咱们刚才说的这个APIAPI里边的话呢,这个类啊,那要使用配置文件呢,呃,基本上大家也有一个思路了,就是你看这个方法里边有没有出现,呃,像property properties是吧。
09:04
哎,或者呢,提供的写的是一个文件,哪怕说是个流哎都行,哎你就这里边怎么去找呢,往下找的时候,你看这个connection啊,Connection是作为它的一个返回值的,看看这个右边呢,在参数当中有没有呢?呃,提到了叫pro。啊,因为咱们现在使用基本上都是用pro这样的方式了啊,前提呢,你得关注左边它历史connection啊,那事实证明呢,没有这大家就不用细看了啊啊,那没有的话那怎么办呢?诶想到另外一个结构就在这啊,有一个basic data source factory,诶点开,哎,这个以前咱们讲基础的时候提过,说某某某的factory。哎,这个作用是什么呀。嗯,叉叉叉的一个factory factory工厂。是不是就是来提供这个造前面这个类的对象的,哎,对啊,然basic data source factory,目的呢,就是为来为了去创建这个basic data source的,哎,往下看,像一般这里边结构呢,通常都会是一些静态的方法,哎,确实这有个静态的啊,这呢,我们提到一个说create一个data source,哎,当我们通过当前类去调离方法的时候呢,返回了一个data source,其实就是我们上面这个basic data source了,同时呢,我们传入了一个properties。
10:18
一看到。就比较兴奋了,呃,因为呢,他就可以去漏的一个流了是吧,诶然后把这个信息呢,给它加载进来,诶我们这块用的呢,其实就是这个方法啊好,那这块呢,我们就写了啊叫basic。诶data,诶s factory点,哎,我们调了一个叫create data s哎,Properties这样一个操作,哎这时候大家你会发现我们这里边怎么写的叫二个零。哎,凡是出现这种情况呢,都是因为我们没有去导这个源码。啊,没有导这源码呢,就会这样的,那举个例子,比如我们现在呢,我按住CTRL键一点,哎,显然呢,就是这种情况啊,我们去导一下源码,导一下源码呢,你需要先看一下。
11:01
这个我们导的是这个,呃,DBCP,这不有一个叫src嘛,这是一个压缩文件的方式啊,所以过来点击。诶找这儿找一个这个文件。嗯,这个是咱们驱动往上。这个里边,嗯。不对了,往上这是吧,来打开OK行,这就打开了啊打开以后呢,再关一下,然后此时呢,你再去点哎create,那这时候呢,我们提示的叫pro了,而且这块呢,也会读到你这个源码当中的这个说明信息。啊,这相当于它的这个注释了哈,好点一下,那这里边儿呢,我们需要去提供一个叫I pros。哎,这个就先这样的,把名字先起好了,那我们这块去new一个啊叫proper。诶pro,然后呢,诶CTRL1啊得到一个叫pro,那pros点咱们需要呢,去load加载一个流。啊,加载一个流,先把这写好就叫is了,那具体这个加载方式呢,咱们先得提供好一个配置文件啊,然后再说这个加载方式,配置文件呢,咱们习惯上都写在src下了,所以还是在这个下边去新建一个文件。
12:14
这个文件呢,咱们之前叫GB,呃,JDBC是吧,正常咱们叫DBCP这种数据库连接池技术啊,点properties。这样子呗。好finish式,那这里边写写的话呢,这时候呢,就得哎关注了,咱们刚才在这边写的时候。哎,是不是就这四个信息啊。哎,那所以说你这块写的时候呢,得考虑上人家这个名,这个呢,诶你这块写的写法,他回头呢,就是拿你这个名对应的那个属性了,所以也要有一个对应关系啊,哎,那这块呢叫driver,哎,Class name,哎这个值。CTRLCCTRLV粘过来,诶,URL。
13:04
嗯,这个,然后use name,注意这个N,它这个N呢,没有大写,说明它把整个这个当成一个单词了,所以这个N呢,你也不要大写。Word诶password abc123好,Controltrs下边呢,这块还涉及到相关的一些其他的一个情况啊,比你您受size啊,哎,这个你也可以在这进行一个设置,这个记着改写成一个小写的啊,类似这样的,诶,你可以再去做一个设置等等,好我这就不列了,好这就算完事了。行,那么回过来。还找到咱们这个DBCP啊。诶后来这块呢,我们就去加载这个文件,诶放到这了,放到src下了,这个咱们说的之前呢,加载都是用的那个类加载器是吧。嗯,咱们其实两种方式都可以吧。
14:02
那又提到两种方式啊,第一种呢,还是使用类的加载器class loader,第二我们获取一个系统类加载器,第get resource as stream。哎,这个呢,就是DBCPCTRLC。诶CTRLV放到这儿,然后呢,诶CTRL1得到一个,诶输入流,诶把这流呢放进去就行。哎,这是一种方式啊,还可以怎么做来着。哎,是不是还可以用我们讲的那个最普通的那个input stream是吧?哎,Is,哎,就这两种方式,哪个都行啊,晚上有同学发微信问我说这俩有什么区别,都可以啊,都可以,这个里边呢,你要new的话,你把这个file也写上,只不过呢,此时它识别的是当前工程。当前工程项,然后呢,你在在它的src下,诶有这样一个文件呗,Ctrl shift o一下这样就行,对吧?诶把内容呢再放进去,然后呢,诶通过create这样方式,先把异常的都抛一下啊,诶创建以后CTRL1啊我们就得到一个data source。
15:14
然后呢,你再拿着这个S。第2GET一个C,诶,CTRL1得到一个连接,诶这就可以了。诶往这放啊,这呢是关于我们获取这个流的啊,两种方式OK没问题啊,这个我们跑一下。哎,这就拿到了。行,那么第一种方式跟第二种方式相比的话呢,我们肯定要推荐使用第二种方式啊,就是使用配置文件的方式。诶推荐啊,那结合着我们使用的这种方式,咱们是不是又可以把这个诶gdb CU us里边,哎可以使用DBCP获取一个连接了,对吧?诶我们就可以把这个代码从这到这,诶然后CTRLC一下,诶在咱们这个jdbc u里边呢,做一个体现。
16:07
哎,这个我们就类似的,我就写到这了啊,诶,Public static。Connection get connection这个写个二了。诶,CTRLV粘过来。哎,这个相应的异常呢,我们都给大家去抛出一下。哎,这个呢,写个标识。呃,使用DBCP。诶,数据库连接池技术。诶,来获取数据库连接。哎,这个小孩,那最后呢,我们给人家做一个返回啊,哎,Return一个害怕。看这就行了,行这呢,咱们用的是呃,DBCP的这种方式,咱们先不着急去测试啊,先看一看这种方式,这样写其实也有点问题,哎,问题呢,跟咱们说的上边这个一样啊,哎,CP0的时候呢,我们这个池子呢,造一个就行,你这个里边呢,每调一次连接,我只是想拿个链接,但你是不是每次又给我造一个池子啊,哎,所以这个事儿呢,不太靠谱,怎么办呢?
17:19
那你要往外提提的话呢,我们想说这这是你造这个数据库连接池呢,啊嗯,这是咱们核心的代码,说创建一个,哎,这个DBCP啊数据库连接池,那你这块呢,这个操作呢,主要是让他执行一次就行,所以你可以考虑说,哎,我想把这个拿出来。但这个拿出来以后呢,我这需要用这个相当于你上面这个操作是不是都得拿出来,都拿出来往上提,提完以后就崩溃了。不是还有啥的问题,是这块语法过不去的问题是吧,我们在这个类当中,你说写方法行,你写属性行,这我可以把你当成个属性,这是什么鬼是吧?在那里边不允许出现这样的结构啊,这这咋整。
18:08
对吧,第另一个第另外一个方法,第另一个方法,那跟我写到这有啥区别啊,每第一个方法这不都执行一次吗?诶我们希望这个操作呢,就执行一次,你要说这个属性的话呢,还好。诶,我们就生明成一个static就一份就行,关键呢,你这个属性还不是一下就完成了,你还整了好几个好几步操作哈,诶这个时候呢,我们考虑呢,使用哎静态代码块,哎静态代码块就行,哎你看我这样做啊,最终目的呢,我们希望这个data so,其实就一个,所以我就先这样啊private哎,我就声明一个static的data source。要先声明好它,然后呢,下边我紧接着写一个叫静态代码块,静态代码块随着类的加载而加载,就只执行一次,把这个呢去一下,把这个代码从这到这。
19:05
CTRLX放到这。这个呢,咱们就不整这两种方式了啊,就保留一个就行啊。来,这样就行了。哎,你看一下这呢,我们声明一个,呃,叫数据库连接池,声明完以后紧接着通过这个静态代码块加载,加载的话呢,我们其实就相当于帮你做了一个实例化,然后呢,每调这个方法的时候呢,拿着唯一的一个S去get一个connection就行了。哎,这样做,然后这里边有异常,哎,咱们在这个静态代码块里边处理这个异常也是问题不大啊,哎,你把它选中,呃,点右键我们有一个,诶try catch就行。哎,这就行,哎,所以这个呢,我们,诶这样去处理啊。行,这个写完以后get connection2啊这个呢是使用的DBCP了,然后咱们找到咱们上面的一个例子啊,Customer deal test,诶在这呢,咱们是一用的是c.P0,咱们改成二啊用的DBCP跑一下。
20:11
哎,没问题,哎也可以获取到啊,行,这个呢,就是我们的DBCP的数据连接池技术的一个演示啊。
我来说两句