首页 > 代码库 > 03_dbcp数据源依赖jar包,DBCP中API介绍,不同过dbcp方式使用dbcp数据库连接池,通过配置文件使用dbcp数据库连接池

03_dbcp数据源依赖jar包,DBCP中API介绍,不同过dbcp方式使用dbcp数据库连接池,通过配置文件使用dbcp数据库连接池



DBCP数据源

使用DBCP数据源,需要导入两个jar

Commons-dbcp.jar:连接池的实现

Common-pool.jar:连接池实现的依赖库。

 

导入mysqljar包。

 

DBCP核心API

BasciDataSource  它可以通过实例化对象的方式获得一个对象。

它里面有如下方法:

setDriverClassName(String driverClassName)设置驱动类的名称。

setInitialSize(int initialSize)设置初始化时的链接数目。

setMaxActive(int maxIdle)设置最大的并发访问数量。

setMaxIdle(int maxIdle):设置最大的闲置数目。

setPassword:用于设置密码。

setUrl:设置url

setUsername:设置用户名。

 

 

数据源实现BasicDataSourceFactory  用于创建数据源的工厂类,

 

不设配置文件时使用BasicDataSource的程序的写法:

package cn.toto.utils;

 

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

import javax.sql.DataSource;

 

import org.apache.commons.dbcp.BasicDataSource;

 

publicclass JdbcUtils {

   private JdbcUtils(){}

   //定义BasicDataSource的父类接口的形式,获得ds的参数。

   privatestatic DataSourceds;

   

   static {

          //要想使用写好的数据源的功能,得先初始化一个dbcp连接池

          BasicDataSource bds = new BasicDataSource();

          

          //设置一系列参数

          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接口。

   }

   //获得连接池

   publicstatic DataSource getDataSource(){

      returnds;

   }

 

   

   //获得与指定数据库的连接

   publicstatic Connection getConnection()throws SQLException{

      //从连接池返回一个连接  

      returnds.getConnection();

   }

   

   publicstaticvoid release(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;

      }

   }

}

 

用于验证的主函数的写法:

package cn.toto.demo;

 

import java.sql.Connection;

import java.sql.SQLException;

 

import cn.toto.utils.JdbcUtils;

 

publicclass Demo {

 

   publicstaticvoid main(String[] args)throws SQLException {

      

      for(int i=0;i<30;i++){

          Connection conn = JdbcUtils.getConnection();//如果只写这句,程序将一直等待执行。

          System.out.println(conn);//不写下面一句时,打印输出,验证是否有20条,结果是20

          

          conn.close();//用一个放回一个,加上这一句之后将出现30条数据。

      }

   }

 

}

 

在文档中还有一个方法:

org.apache.commons.dbcp
Class BasicDataSourceFactory
它里面有一个这样的方法:

createDataSource(Properties properties)
          Creates andconfigures a
BasicDataSourceinstance 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

 

通过配置文件的方式获得的数据源的源码是:

package cn.toto.utils;

 

importjava.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

 

import javax.sql.DataSource;

 

importorg.apache.commons.dbcp.BasicDataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

 

publicclass JdbcUtils {

   private JdbcUtils() {

   }

 

   //定义BasicDataSource的父类接口的形式,获得ds的参数。

   privatestatic DataSourceds;

 

   static {

      try {

          InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream(

                 "config.properties");//通过类加载的方式获得获得配置文件的流

          Properties prop = new Properties();

          prop.load(in);//通过流将配置项加载进来。

          //通过工厂类读取

          ds = BasicDataSourceFactory.createDataSource(prop);

      } catch (Exception e) {

          thrownew ExceptionInInitializerError();

      }

   }

 

   //获得连接池

   publicstatic DataSource getDataSource() {

      returnds;

   }

 

   //获得与指定数据库的连接

   publicstatic Connection getConnection()throws SQLException {

      //从连接池返回一个连接

      returnds.getConnection();

   }

 

   publicstaticvoid release(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数据库连接池