释放双眼,带上耳机,听听看~!
概述
数据库连接池技术:管理连接对象。
- 应用程序就不需要创建和断开连接对象,而是交给数据库连接池管理
- 数据库连接池断开,不是销毁对象,而是把连接对象归还给连接池
基本参数
- 初始化大小:散据库连接池里面初始的连接对象个数
- 最大连接数:数据库连接池里面最大的连接对象个数
- 最大等待时间:用户通过连接池取连接对象时,需要等待的时间
- 最大空闲连接:数据库连接池里面,在用户访问趋于稳定时,最大的空闲连接个数
- 最小空闲连接:在用户访问趋于顶峰时,数据库连接池里面剩余的最小连接对象个数。
DBCP
DBCP数据库连接池(DataBase Connection Pool),是由apache组织提供的数据库连接池技术,开源免费。
使用DBCP的基本步骤:
- 导包:commons-dbcp.jar,commons-pool.jar
-
DBCP获取连接对象:设置连接参数。
- 四个连接参数:driverName,ur1,username,password.
-
DBCP获取连接对象具体的方式:
- 第一种:直接使用BasicDatasource类创建连接对象。
- 第二种:通过读取配置文件创建连接对象
源码
使用BasicDatasource类方式:
package p01_DBCP;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class DBCP_test_1 {
public static DataSource ds = null;
static{
//获取DBCP数据源
BasicDataSource bds = new BasicDataSource();
//设置连接数据库需要的参数
bds.setDriverClassName("com.mysql.jdbc.Driver");
bds.setUrl("jdbc:mysql://localhost:3306/jdbc");
bds.setUsername("root");
bds.setPassword("root");
//设置连接池参数
bds.setInitialSize(5);//初始化连接对象个数
bds.setMaxActive(10);//最大连接数
ds = bds ;
}
public static void main(String[] args) {
try {
Connection con = ds.getConnection();
DatabaseMetaData metaData = con.getMetaData();
System.out.println(metaData.getDriverName());
System.out.println(metaData.getURL());
} catch (SQLException e) {
e.printStackTrace();
}
}
}
使用读取配置文件方式,注意此处配置文件要放在src下
package p01_DBCP;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class DBCP_test_2 {
public static DataSource ds;
static {
Properties prop = null ;
try {
//加载配置文件对象
prop = new Properties();
//获取配置文件的字节输入流
ClassLoader classLoader = new DBCP_test_2().getClass().getClassLoader();
InputStream in = classLoader.getResourceAsStream("dbcpconfig.properties");
//加载配置文件
prop.load(in);
//创建数据源对象
ds = BasicDataSourceFactory.createDataSource(prop);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
Connection con = ds.getConnection();
DatabaseMetaData metaData = con.getMetaData();
System.out.println(metaData.getDriverName());
System.out.println(metaData.getURL());
} catch (SQLException e) {
e.printStackTrace();
}
}
}
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=root
#初始化连接
initialSize=5
#最大连接数量
maxActive=10
#最大空闲连接
maxIdle=10
C3P0
C3P0数据源是目前最流行的数据库连接池技术之一,它的性能更加优越,也提供了对后期数据框架hibernate很好的支持,它也是开源免费。
使用C3P0的基本步骤:
- 导包:c3p0-0.9.1.2.jar
-
设置连接参数:
- 四个连接参数:driverName,ur1,username,password.
-
C3P0获取连接对象具体的方式:
- 第一种:通过ComboPooledDataSource的构造方法获取数据源对象,从而获取连接对象
- 第二种:通过配置文件获取数据源对象,从而获取连接对象。
源码
通过ComboPooledDataSource类加载的方式
package p02_C3P0;
import java.beans.PropertyVetoException;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0_test {
public static DataSource ds = null;
//初始化c3p0数据源
static {
ComboPooledDataSource cpds = new ComboPooledDataSource();
try {
//设置四个连接参数
cpds.setDriverClass("com.mysql.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
cpds.setUser("root");
cpds.setPassword("root");
//设置连接池参数
cpds.setInitialPoolSize(5);
cpds.setMaxPoolSize(10);
ds = cpds;
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
System.out.println(ds.getConnection());
} catch (SQLException e) {
e.printStackTrace();
}
}
}
通过配置文件的方式:(最简单)
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">
jdbc:mysql://localhost:3306/jdbc
</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="checkoutTimeout">30000</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
<named-config name="itcast">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">
jdbc:mysql://localhost:3306/jdbc
</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">15</property>
</named-config>
</c3p0-config>
package p02_C3P0;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0_test_2 {
public static DataSource ds = null;
static {
/**
* 构造方法中就自动加载配置文件了,所以说C3P0方式的配置文件名字必须是c3p0-config.xml
* 配置文件中可以书写多个配置,一个默认配置+n个命名配置
* 参数为空使用配置文件中的默认配置
* 参数有值使用配置文件中对应值的命名配置
* */
ComboPooledDataSource cpds = new ComboPooledDataSource();
ds = cpds ;
}
public static void main(String[] args) {
try {
System.out.println(ds.getConnection());
} catch (SQLException e) {
e.printStackTrace();
}
}
}