数据库连接池c3p0和Druid使用教程
Posted 花伤情犹在
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库连接池c3p0和Druid使用教程相关的知识,希望对你有一定的参考价值。
前言
本文将介绍数据库连接池:c3p0和Druid使用教程
数据库连接池:
概念:其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
好处:
- 节约资源
- 用户访问高效
实现:
- 标准接口:DataSource javax.sql包下的
方法:
- 获取连接:getConnection()
- 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接
一般我们不去实现它,有数据库厂商来实现 C3P0:数据库连接池技术 Druid:数据库连接池实现技术,由阿里巴巴提供的
C3P0:数据库连接池技术
C3P0官方文档-英文不好的可以使用网页:
步骤:
- 导入jar包 (两个)
c3p0.x.x.x.jar
和mchange-commons-java-x.x.x.jar
不要忘记导入数据库驱动jar包
- 定义配置文件:
名称:c3p0.properties
或者c3p0-config.xml
路径:直接将文件放在src
目录下即可,C3P0
会对c3p0.properties
或者对c3p0-config.xml
进行自动解析的。
创建核心对象:数据库连接池对象ComboPooledDataSource
获取连接:getConnection
代码:
//1.创建数据库连接池对象
DataSource ds = new ComboPooledDataSource();
//2. 获取连接对象
Connection conn = ds.getConnection();
关于C3P0的配置:
c3p0的配置方式分为三种,分别是:
- setters一个个地设置各个配置项(不推荐)
- 类路径下提供一个c3p0.properties文件
- 类路径下提供一个c3p0-config.xml文件
通过硬编码方式使用set方法一个个地设置各个配置项:
public static void main(String[] args) {
ComboPooledDataSource comboPooledDataSource = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 创建 ComboPooledDataSource 对象,该对象间接实现了 java 官方提供的 DataSource 接口
comboPooledDataSource = new ComboPooledDataSource();
comboPooledDataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/lcz");
comboPooledDataSource.setUser("root");
comboPooledDataSource.setPassword("root");
// 设置初始化连接数
comboPooledDataSource.setInitialPoolSize(20);
// 设置最小连接数,当连接池还有2个的时候,就开始申请连接数
comboPooledDataSource.setMinPoolSize(2);
// 设置最大连接数,最多只能有 40 个连接
comboPooledDataSource.setMaxPoolSize(40);
// 当连接数不够用时,一次向数据库申请多少个连接
comboPooledDataSource.setAcquireIncrement(5);
// 只是对连接做了优化,剩下的操作不变
String sql = "select * from user";
connection = comboPooledDataSource.getConnection();
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
Integer id = resultSet.getInt("id");
String name = resultSet.getString("name");
Integer age = resultSet.getInt("age");
System.out.println(id + name + age);
}
} catch (PropertyVetoException e) {
e.printStackTrace();
} catch (SQLException e){
e.printStackTrace();
} finally {
try {
resultSet.close();
preparedStatement.close();
// 这里并不是把连接关闭了,而是释放到连接池里,等待下一次继续使用
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
c3p0.properties文件:
c3p0.driverClass=com.mysql.cj.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/lcz
c3p0.user=root
c3p0.password=root
c3p0.maxPoolSize=20
c3p0.minPoolSize=3
c3p0.maxStatements=30
c3p0.maxIdleTime=150
参数详解:
#数据库驱动名称
c3p0.driverClass=com.mysql.cj.jdbc.Driver
#数据库连接地址
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/lcz
#数据库用户名
c3p0.user=root
#数据库密码
c3p0.password=root
#连接池中保留的最大连接数。默认值: 15
c3p0.maxPoolSize=20
#连接池中保留的最小连接数,默认为:3
c3p0.minPoolSize=3
#c3p0全局的PreparedStatements缓存的大小。
c3p0.maxStatements=30
#最大空闲时间,多少秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0
c3p0.maxIdleTime=150
c3p0-config.xml文件:
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 也可以添加多个配置 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/lcz</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数 -->
<!--初始化申请的连接数量-->
<property name="initialPoolSize">5</property>
<!--最大的连接数量-->
<property name="maxPoolSize">10</property>
<!--超时时间-->
<property name="checkoutTimeout">3000</property>
</default-config>
</c3p0-config>
Druid数据库连接池实现技术(阿里巴巴提供
)
- 步骤:
1. 导入jar包druid-x.x.x.jar
2. 定义配置文件:
* 是properties
形式的
* 可以叫任意名称,可以放在任意目录下
3. 加载配置文件。Properties
4. 获取数据库连接池对象:通过工厂来获取DruidDataSourceFactory
5. 获取连接:getConnection
代码:
//3.加载配置文件
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//4.获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//5.获取连接
Connection conn = ds.getConnection();
Druid配置文件:
# 数据库驱动名称
driverClassName=com.mysql.cj.jdbc.Driver
# 数据库连接地址
url=jdbc:mysql://localhost:3306/lcz
# 数据库用户名
username=root
# 数据库密码
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
以上是关于数据库连接池c3p0和Druid使用教程的主要内容,如果未能解决你的问题,请参考以下文章