第三方数据库连接池:C3P0的使用
?
?????? 目前,在实际开发中存在很多流行的性能优良的第三方数据库连接池,我不用费时费力的去写一个连接池而且还得考虑性能和稳定性等因素,既然有现成的为什么不用呢。来试试C3P0连接池的使用:
一、下载并导入C3P0的jar包,下载地址:http://cn.jarfire.org/c3p0.html
?
二、配置数据源,有三种方法:
?
1、通过set方法手动配置
class="java">ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass(props.getProperty("driverClass"));
cpds.setJdbcUrl(props.getProperty("jdbcUrl"));
cpds.setUser(props.getProperty("user"));
cpds.setPassword(props.getProperty("password"));
?
2、配置默认的属性文件c3p0.properties(既然是默认当然文件名不能随意更改)
配置如下:
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/jdbc
c3p0.user=root
c3p0.password=java
...
在程序中初始化数据化只需要调用:ComboPooledDataSource cpds = new ComboPooledDataSource();它会自动对属性文件进行解析。
?
3、类路径下配置一个默认的xml配置文件:c3p0-config.xml
?
?
??????这种方式和第二种方式类似,但是利用配置文件有一个好处就是支持多数据源的配置,提供default-config和named-config两种配置方式例如:
//配置MySQL和Oracle两种数据源的配置
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/day16
root
root
10
30
20
5
200
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@127.0.0.1:1521:ORCL
scott
tiger
50
100
50
1000
0
60
5
default-config表示默认的数据源配置,named-config表示自定义配置数据源,调用默认数据源和第二种方式一样,如果调用自定义数据源只需在构造方法里传递自定义数据源名即可,如上面name中的"oracle":
ComboPooledDataSource cpds = new ComboPooledDataSource(“oracle”);
?
演示代码:
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* C3P0连接池类
* @author Administrator
*
*/
public class DBManager {
private static final DBManager dbm = new DBManager();
static ComboPooledDataSource cpds = new ComboPooledDataSource("oracle");
private Connection conn = null;
public DBManager(){}
/**
* 获取连接
* @return
*/
public synchronized Connection getConnection(){
try {
conn = cpds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//观察当前连接状态(测试用)
public synchronized void getInfo() throws Exception{
System.out.println(cpds.getMaxPoolSize());// 最大连接数
System.out.println(cpds.getMinPoolSize());// 最小连接数
System.out.println(cpds.getNumBusyConnections());// 正在使用连接数
System.out.println(cpds.getNumIdleConnections());// 空闲连接数
System.out.println(cpds.getNumConnections());// 总连接数
}
}
?
?