现在社会上出了很多的数据库连接池技术,但是主流的也就那么一两个,如c3p0、dbcp等。今天,我们就来学习一下数据库连接池技术
一、关于dbcp技术
首先也是需要导入dbcp的jar包:
common-dbcp-xxx.jar
common-pool-xxx.jar
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;
public class MyDBCP {
//需要连接数据库的各种配置
private static String driverClass = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/day18";
private static String user = "root";
private static String password = "123";
//定义一个连接池对象BasicDataSource
private static BasicDataSource ds = new BasicDataSource();
static {
//设置需要进行连接数据库的各种参数设置
ds.setDriverClassName(driverClass);
ds.setUrl(url);
ds.setUsername(user);
ds.setPassword(password);
//连接池初始化的连接数
ds.setInitialSize(5);
//连接池最大的连接数,超过则会进行等待其他的连接回收
ds.setMaxActive(10);
//超出连接数等待的时间,超过则会抛异常
ds.setMaxWait(3000);
}
public static Connection getConn(){
try {
Connection conn = ds.getConnection();
return conn;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
在dbcp连接池技术中,同样也可以使用properties文件进行配置
二、关注c3p0连接池
同样也是要导入c3p0的jar包
c3p0-xxx.jar
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class MyC3P0 {
/*
* 采用配置文件,这些配置信息可以不用写在这里,但是没有xml配置文件则需要定义数据
private static String driverClass = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/day18";
private static String user = "root";
private static String password = "123";
*/
//定义一个无参的构造方法,表示的是加载默认的配置,在xml配置文件中<defalut>中的数据
private static ComboPooledDataSource ds = new ComboPooledDataSource();
//定义有参的构造,表示的是加载在xml文件中<name>中规定的数据库
// private static ComboPooledDataSource ds = new ComboPooledDataSource("day17");
/*
static{
try {
//设置连接数据库所需要的参数,驱动程序,url,用户,密码
ds.setDriverClass(driverClass);
ds.setJdbcUrl(url);
ds.setUser(user);
ds.setPassword(password);
//设置连接池一开始定义的连接数
ds.setInitialPoolSize(5);
//设置连接池最大的连接数,超出以后则需要进行等待
ds.setMaxPoolSize(10);
//设置连接池的连接数,如果等待的时间超过了这个时间的话就会抛出异常
ds.setCheckoutTimeout(3000);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
*/
public static Connection getConn(){
try {
Connection conn = ds.getConnection();
return conn;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static void close(Connection conn) {
try {
if(conn !=null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在类加载的内路径下,设置c3p0-config.xml可以进行配置
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day18</property>
<property name="user">root</property>
<property name="password">123</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">3000</property>
</default-config>
<named-config name="day17">
<!-- 表示要连接的指定数据库 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///day17</property>
<property name="user">root</property>
<property name="password">123</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
</named-config>
</c3p0-config>
今天学习的这两种技术,对于以后操作数据访问层来说是必不可少的技术,能够避免浪费connection资源,更关注于去学习c3p0技术,dbcp现今有点漏洞,以至于有点被淘汰了,所以c3p0是现在数据库连接池技术的主流