DBCP数据源
使用DBCP数据源,需要导入两个jar包
Commons-dbcp.jar:连接池的实现
Common-pool.jar:连接池实现的依赖库。
导入mysql的jar包。
DBCP核心API
BasciDataSource 它可以通过实例化对象的方式获得一个对象。
它里面有如下方法:
setDriverClassName(String driverClassName) 设置驱动类的名称。
setInitialSize(int initialSize) 设置初始化时的链接数目。
setMaxActive(int maxIdle) 设置最大的并发访问数量。
setMaxIdle(int maxIdle): 设置最大的闲置数目。
setPassword:用于设置密码。
setUrl:设置url
setUsername:设置用户名。
数据源实现BasicDataSourceFactory 用于创建数据源的工厂类,
不设配置文件时使用BasicDataSource的程序的写法:
packagecn.toto.utils;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importjavax.sql.DataSource;
importmons.dbcp.BasicDataSource;
publicclassJdbcUtils {
privateJdbcUtils(){}
//定义BasicDataSource的父类接口的形式,获得ds的参数。
privatestaticDataSourceds;
static{
//要想使用写好的数据源的功能,得先初始化一个dbcp连接池
BasicDataSource bds =newBasicDataSource();
//设置一系列参数
bds.setDriverClassName("com.mysql.jdbc.Driver");
bds.setUrl("jdbc:mysql://localhost:3306/day14");
bds.setUsername("root");
bds.setPassword("123456");
//设置初始化大小
bds.setInitialSize(5);//初始时设置5个连接数
bds.setMaxActive(20);//设置并发访问数目。
//bds.setMaxWait(0);//设置最大等待时间。不等待。
ds= bds; //获得数据是通过父接口的DataSource接口。
}
//获得连接池
publicstaticDataSource getDataSource(){
returnds;
}
//获得与指定数据库的连接
publicstaticConnection getConnection()throwsSQLException{
//从连接池返回一个连接
returnds.getConnection();
}
publicstaticvoidrelease(ResultSet rs,Statement stmt,Connection conn){
if(rs!=null) {
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
rs =null;
}
if(stmt!=null){
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
stmt =null;
}
if(conn!=null) {
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
conn =null;
}
}
}
用于验证的主函数的写法:
packagecn.toto.demo;
importjava.sql.Connection;
importjava.sql.SQLException;
importcn.toto.utils.JdbcUtils;
publicclassDemo {
publicstaticvoidmain(String[] args)throwsSQLException {
for(inti=0;i<30;i++){
Connection conn = JdbcUtils.getConnection();//如果只写这句,程序将一直等待执行。
System.out.println(conn);//不写下面一句时,打印输出,验证是否有20条,结果是20条
conn.close();//用一个放回一个,加上这一句之后将出现30条数据。
}
}
}
在文档中还有一个方法:
mons.dbcp
Class BasicDataSourceFactory它里面有一个这样的方法:
createDataSource
(Propertiesproperties)
Creates andconfigures aBasicDataSource
instance based on the given properties.
它是根据Properties,根据properties中的信息获得信息。
配置dbcp的配置文件的方法是:找到文档中的Configuration,里面有多个属性。
在src下面编写一个一个配置文件config.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day14
username=root
password=123456
initialSize=5
maxiActive=20
通过配置文件的方式获得的数据源的源码是:
packagecn.toto.utils;
importjava.io.IOException;
importjava.io.InputStream;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importjava.util.Properties;
importjavax.sql.DataSource;
importmons.dbcp.BasicDataSource;
importmons.dbcp.BasicDataSourceFactory;
publicclassJdbcUtils {
privateJdbcUtils() {
}
// 定义BasicDataSource的父类接口的形式,获得ds的参数。
privatestaticDataSourceds;
static{
try{
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream(
"config.properties");//通过类加载的方式获得获得配置文件的流
Properties prop =newProperties();
prop.load(in);//通过流将配置项加载进来。
//通过工厂类读取
ds= BasicDataSourceFactory.createDataSource(prop);
}catch(Exception e) {
thrownewExceptionInInitializerError();
}
}
// 获得连接池
publicstaticDataSource getDataSource() {
returnds;
}
// 获得与指定数据库的连接
publicstaticConnection getConnection()throwsSQLException {
// 从连接池返回一个连接
returnds.getConnection();
}
publicstaticvoidrelease(ResultSet rs, Statement stmt, Connection conn) {
if(rs !=null) {
try{
rs.close();
}catch(SQLException e) {
e.printStackTrace();
}
rs =null;
}
if(stmt !=null) {
try{
stmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
stmt =null;
}
if(conn !=null) {
try{
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
conn =null;
}
}
}
03_dbcp数据源依赖jar包 DBCP中API介绍 不同过dbcp方式使用dbcp数据库连接池 通过配置文件使用dbcp数据库连接池