C3P0:数据库连接池技术
-
Datasource接口介绍
-
用于连接此DataSource对象表示的物理数据源的工厂,作为DriverManager工具的替代方案,在C3P0中ComboPooledDatasource类实现了Datasource接口。使用ComboPooledDatasource()创建连接池
-
步骤:
-
**导入jar包(两个)**c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.12.jar,不要忘记导入数据库驱动jar包
-
定义配置文件:
- 名称 c3p0.properties 或者 c3p0-config.xml
- 路径:直接将文件放在src目录下即可。
-
创建核心对象:数据库连接池对象CombopooledDatasource(实现了Datasource接口)
DataSource dataSource = new ComboPooledDataSource();
-
获取连接∶getconnection()
Connection connection = dataSource.getConnection();
-
-
配置文件c3p0-config.xml,配置文件放到src路径下
<c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/db4</property> <property name="user">root</property> <property name="password">123456</property> <!-- 连接池参数 --> <!-- 初始化连接对象数量 --> <property name="initialPoolSize">5</property> <!-- 最大创建连接对象数量 --> <property name="maxPoolSize">10</property> <!-- 超时检查时间最大时长3000ms --> <property name="checkoutTimeout">3000</property> </default-config> <named-config name="otherc3p0"> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/db4</property> <property name="user">root</property> <property name="password">123456</property> <!-- 连接池参数 --> <property name="initialPoolSize">5</property> <property name="maxPoolSize">8</property> <property name="checkoutTimeout">1000</property> </named-config> </c3p0-config>
示例
package com.ningxiao.day17;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*
author :wt
@create 2020-08-27 14:35
*/
public class Demo09 {
public static void main(String[] args) throws SQLException {
//1. 创建连接池对象,初始化信息在配置文件中完成,创建形式是接口多态。
DataSource dataSource = new ComboPooledDataSource();
//2. 从连接池中获取连接对象
Connection connection = dataSource.getConnection();
String sql = "select * from account";
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
double balance = rs.getDouble("balance");
System.out.println(id+":"+name+":"+balance);
}
//断开连接对象,将连接对象归还给数据库连接池
connection.close();
}
}