文档章节

JDBC

凯哥学堂
 凯哥学堂
发布于 2017/09/11 15:21
字数 1251
阅读 7
收藏 0
点赞 0
评论 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

© 著作权归作者所有

共有 人打赏支持
凯哥学堂
粉丝 10
博文 287
码字总数 257252
作品 0
东城
程序员

暂无相关文章

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 7分钟前 ⋅ 0

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 45分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 47分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 57分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 今天 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 今天 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 今天 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 今天 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部