文档章节

JDBC

凯哥学堂
 凯哥学堂
发布于 2017/09/11 15:21
字数 1251
阅读 7
收藏 0

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

1.数据库连接池

什么是数据库连接池?

image

现阶段的连接数据库的方法,都是通过DriverManager.getConnection这个接口方法来获得连接对象Connection。但是每次都通过这种方式来获得数据库连接对象很麻烦也很耗费资源。
每次需要连接对象的时候,都要花费时间通过这个方法去获得数据库连接对象,很耗费时间。 怎么优化获得数据库连接对象,使耗时更短:

image

使用数据库连接池:就是在连接数据库前事先用几个数据库连接对象变量去和数据库进行连接好(一直连接,不断开),在池子中一直等待,当要使用数据库连接对象的时候,直接到池子中把已经提前连接好的对象拿来用,然后用完之后再把对象还回池子里面去。如果池子中有3个事先连接好的数据库连接对象,但是一次把三个对象都拿去用了,那么下一个用户过来要使用数据库连接对象的时候,就要等待了,等待前面的用完把对象还回到池子中,然后再去拿来使用。
连接池的目的就是提前准备多个已经连接到了数据库的对象在那里准备着被拿去使用,但你要使用的时候,直接从池子里拿出来用,用完之后再给人家放回去,用来优化数据库连接。

image

Java公司并没有做数据库连接池的实现,它只是做了一个规范,也不给出具体的数据库连接池的概念,而是做了一个数据源javax.sql.DataSource,这个数据库源只是数据库连接的一个优化手段的规范的接口,至于你具体怎么去实现这个数据库连接池由自己定义。或者你自己不想使用数据库连接池这个方法也可以,你只要在这个地方能够以很优化的方式给我提供数据库连接对象就行了。

image

image

image

这是数据源接口最主要的两个方法,这个接口只提供获得数据库连接对象的规范,自己去实现。业界中流行的两个数据源插件:

image

C3P0是用的比较多的,占用资源比较少的一种数据源插件,DBCP是apache提供的一种数据源插件,
DBCP:DATABASE CONNECTION POOL:APACHE推出的数据源插件:

image

在apache官网下的components下。我们用maven来下载jar包。

image

可以选用上面两个之一。

image

image

上面是具体的操作类。
数据库连接池的目的是优化数据库连接对象的,不会像jdbc那样可以自动帮你加入驱动,需要自己手动加入驱动.

image

image

连接方式如上。

image

image

可见,我们可以用数据源的类来获得多个连接对象,最多获得8个。默认情况下设置池子中养8个连接对象。可以自己设置池子里面最多养的连接对象的数量:

image

image

注意:连接池内的对象用完后,必须调用close方法来把对象放回池子里面去。

image

image

把其中的一个关闭,则第四个又能连接上了,如果在老版本的DBCP里面,这种情况下,第四个的hashcode和第三个的hashcode是一样的,这就说明,其实是第三个连接完了之后把连接对象还回池子里面了,而第四个连的还是同一个对象。

image

C3P0的优势就是速度快、占用内存小。DBCP的2版本在资源管理上进行了改善,DBCP的1版本在资源管理上面做的不好。
C3P0是开源的数据源插件,可以进行自动的资源回收,主要用于harbinet和spring这两个第三方框架上使用的比较多。

image

在maven中下载。

image

主要使用的操作类是上面这个,它的配置信息,可以使用set来设置也可以把信息放在文件中。

image

image

image

实际上DBCP和C3P0里面的操作类都是实现了javax.sql.DataSource这个接口的。
以后公司一般使用C3P0好一点,对资源的优化好一点。

image

C3P0的好处是:能够自动回收资源,
在DBManager中利用C3P0来获得连接对象:

image

© 著作权归作者所有

共有 人打赏支持
上一篇: 配置class PATH
下一篇: JDBC
凯哥学堂
粉丝 17
博文 316
码字总数 284948
作品 0
东城
程序员
私信 提问

暂无文章

支付宝客户端架构分析:自动化日志收集及分析

摘要: 《支付宝客户端架构解析》系列将从支付宝客户端的架构设计方案入手,带领大家进一步了解支付宝在客户端架构上的迭代与优化历程。 小蚂蚁说: 《支付宝客户端架构解析》系列将从支付宝...

阿里云官方博客
16分钟前
1
0
nginx中部署vue打包后的静态文件

如何在nginx中部署静态资源就不描述了, 请看我的这篇博客 将vue脚手架项目打包后的静态文件放到nginx上, 发现有个问题, 即url上有#, 怎么去掉这个#呢. 1 项目中router的mode 路由的mode要为h...

克虏伯
33分钟前
5
0
JS容易理解错误的地方

在这端代码执行的末尾,你会不会hi变量回事函数中的hi了?你会不会认为这不是按引用传递了? 对值传递和引用传递产生质疑了? 1 var hi = {};2 function sayHello(hi) { ...

器石_
35分钟前
3
0
Java开发学习--MongoDB

之前只学过sql,第一次使用非关系型数据库。以前对于关系型数据库与非关系型数据库的概念很模糊,通过这次的学习对这两者有了一个清晰的概念。 主键 在MongoDB中,主键名叫"_id",如果在生成...

微笑向暖wx
38分钟前
3
0
Java8-2-Lambda表达式实战-一句话实现Map中按照Value排序

今天我们来实战一把, 对Map的Value值排序进行简化. 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群...

编程SHA
41分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部