连接池原理
数据库连接池负责分配、管理和释放数据库连接,它的核心思想就是连接复用,通过建立一个数据库连接池,这个池中有若干个连接对象,当用户想要连接数据库,就要先从连接池中获取连接对象,然后操作数据库。一旦连接池中的连接对象被用院了,判断连接对象的个数是否已达上限,如果没有可以再创建新的连接对象,如果已达上限,用户必须处于等待状态,等待其他用户释放连接对象,直到连接池中有被释放的连接对象了,这时候等待的用户才能获取连接对象,从而操作数据库。这样就可以使连接池中的连接得到高效、安全的复用,避免了数据库连接频繁创建、关闭的开销。这项技术明显提高对数据库操作的性能。
无连接池
有连接池
连接池优点
程序启动的时候就已经创建好了连接,不需用户请求的时候创建
用户关闭时不会销毁连接,需要将连接归还,就可以达到复用的效果
如果超过了使用的连接会进行上限的判断,如果没有达到最大值,可以继续创建
如果有空闲连接,会默认的进行销毁(释放)一些连接,让系统达到最优
手动实现连接池原理
1 | 手动实现连接池 (了解) |
DBCP连接池
DBCP也是一个开源的连接池,直接进行使用步骤介绍
- 导包
commons-dbcp-1.4.jar和commons-pool-1.5.6.jar
- 编写数据库连接的配置文件
配置文件名称:*.properties
配置文件位置:建议放在src下
需求:测试连接池查询商品的名字。配置文件dbcpconfig.properties
1 | #连接设置 |
方式一:
1 | public class DBCPDemo { |
方式二:
1 | public class DBCPDemo2 { |
C3P0连接池
- 导包
c3p0-0.9.1.2和mchange-commons-java-0.2.3.4
- 倒入配置文件,放在src下(在使用c3p0连接获取数据源时,会自动读取配置文件,无需读取操作)
c3p0-config.xml
1 |
|
测试类
1 | public class DemoC3p0 { |
也可以对其进行封装
1 | public class C3p0Utils { |
Druid连接池
- 导包 druid-1.0.9
- 倒入配置文件 放在src下面
druid.properties
1 | driverClassName=com.mysql.jdbc.Driver |
- 写一个工具类对配置文件进行读取操作
1 | public class DruidUtils { |
- 测试
第一种:手动
1 | public class TestDruid { |
第二种:自动
1 | public class TestDruid { |
总结:
使用Properties
获取文件对象的时候
DBCP和Druid都需要读取配置文件,C3P0会自动读取配置文件(前提是放在src下),获取的时候用get方法获取就好
用QueryRunner
方法获取对象的时候
Druid,c3p0,DBCP都可创建实体类进行操作
DBCP连接池与C3P0连接池的区别:
- DBCP连接池使用效率高, 而C3P0效率相比较偏低;
- C3P0安全性较高, 而DBCP安全性偏低, 容易丢失连接;
需要的jar包
链接:https://pan.baidu.com/s/1_nqg99Fb83FA1KaFXsip_g
提取码:1314
复制这段内容后打开百度网盘手机App,操作更方便哦