C3P0连接池
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
使用第三方工具要导入jar包,c3p0使用时还需要添加配置文件c3p0-config.xml
配置文件
配置文件名称:c3p0-config.xml (固定)
配置文件路径: src (类路径)
配置文件内容:命名配置
c3p0-config.xml配置文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///school</property>
<property name="user">root</property>
<property name="password">123</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
<named-config name="oracle">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///school</property>
<property name="user">root</property>
<property name="password">123</property>
</named-config>
</c3p0-config>
常见配置项
编写C3P0工具类
package com.pngyul04;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Utils {
private static ComboPooledDataSource dataSource
=new ComboPooledDataSource();
public static DataSource getDataSource(){
return dataSource;
}
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
测试C3P0工具类
package com.pngyul04;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.pngyul02.Sort;
public class TestC3P0Utils {
public static void main(String[] args) throws SQLException {
QueryRunner qr=new QueryRunner(C3P0Utils.getDataSource());
String sql="select * from sort";
List<Sort> list=qr.query(sql, new BeanListHandler<Sort>(Sort.class));
for(Sort sort : list){
System.out.println(sort);
}
}
}
测试结果:
PS : 在平时开发中常用C3P0连接池。另外,其实还可以不写配置文件也可以实现c3p0连接池的工具类,具体怎么实现自行学习。在实际开发当中还是常用写配置文件这种方式实现c3p0工具类。
DBCP连接池
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
配置文件
配置文件名称:*.properties
配置文件路径: 任意,但建议src (类路径)
配置文件内容:不能编写中文,必须使用记事本修改内容,不然中文注释就乱码了
dbcpconfig.properties配置文件代码如下:
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/school
username=root
password=123
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
常见配置项
分类 | 属性 | 描述 |
必须项 | driverClassName | 数据库驱动名称 |
url | 数据库的地址 | |
username | 用户名 | |
password | 密码 | |
基本项(扩展) | maxActive | 最大连接数量 |
minIdle | 最小空闲连接 | |
maxIdle | 最大空闲连接 | |
initialSize | 初始化连接
|
编写DBCP工具类
package com.pngyul05;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import com.pngyul01.JDBCUtilsConfig;
public class DBCPUtils {
private static DataSource dataSource;
static{
try {
InputStream in=DBCPUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
Properties pro=new Properties();
pro.load(in);
dataSource=BasicDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static DataSource getDataSource(){
return dataSource;
}
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
PS:在上一篇中,编写DBCP工具类是用了另一种方法,不写 *.properties文件,而是在代码中之直接设置,两种方法都可以。
测试DBCP工具类
package com.pngyul05;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.pngyul02.Sort;
public class TestDBCPUtils {
public static void main(String[] args) throws SQLException {
QueryRunner qr=new QueryRunner(DBCPUtils.getDataSource());
String sql="select * from sort";
List<Sort> list=qr.query(sql, new BeanListHandler<Sort>(Sort.class));
for(Sort sort : list){
System.out.println(sort);
}
}
}
PS : 测试结果前者一样