首页 > 代码库 > 02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写

02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写



c3p0也是一个开源jdbc连接池,我们熟悉的HibernateSpring框架使用的都是该数据源。

 

这里获得数据源使用的方法是:ComboPooledDataSource

它提供的构造方法有:

ComboPooledDataSource()
           

ComboPooledDataSource(boolean autoregister)
           

ComboPooledDataSource(java.lang.String configName)

通过第三个构造方法读取配置文件,它的配置文件是一个xml文件,也可以是一个properties文件。

 

c3po中的ComboPooledDataSource提供了如下方法:

setDriverClass:设置驱动使用的是

setJdbcUrl:设置url

setInitialPoolSize(int initialPoolSize)

setPassword:设置密码

setUser:设置用户名

 

 

不适用配置文件的使用方法:

package cn.toto.utils;

 

import java.beans.PropertyVetoException;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

import javax.sql.DataSource;

 

import com.mchange.v2.c3p0.ComboPooledDataSource;

 

publicclass JdbcUtils {

   privatestatic DataSourceds;

   

   static {

      try {

          //初始化c3p0连接池

          ComboPooledDataSource cpds = new ComboPooledDataSource();

          cpds.setDriverClass("com.mysql.jdbc.Driver");

          cpds.setJdbcUrl("jdbc:mysql://localhost:3306/day14");

          cpds.setUser("root");

          cpds.setPassword("123456");

          

          cpds.setInitialPoolSize(5);

          cpds.setMaxPoolSize(20);

          

          ds =cpds;

      } catch (PropertyVetoException e) {

          thrownew ExceptionInInitializerError("属性不匹配的错误");

      }

   }

   

   //获取与指定数据的连接

   publicstatic DataSource getSource(){

      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 {

      Connection conn = JdbcUtils.getConnection();

      System.out.println(conn);

//结果是:com.mchange.v2.c3p0.impl.NewProxyConnection@10bbf9e

   }

 

}

 

通过配置文件的方式读取文件。

当通过设置配置文件xml时它可以自动查找,不用通过类加载的方式了。只要它的文件路径是在classloader(类路径也可以说是classes下面)的路径下面。(在官方文档中可以找到配置文件)

配置文件好后的文件是:

<?xmlversion="1.0"encoding="UTF-8"?>

<c3p0-config>

   <default-config>

      <propertyname="automaticTestTable">con_test</property>

      <propertyname="checkoutTimeout">30000</property>

      <propertyname="idleConnectionTestPeriod">30</property>

      <propertyname="initialPoolSize">10</property>

      <propertyname="maxIdleTime">30</property>

      <propertyname="maxPoolSize">100</property>

      <propertyname="minPoolSize">10</property>

      <propertyname="maxStatements">200</property>

      <user-overridesuser="test-user">

          <propertyname="maxPoolSize">10</property>

          <propertyname="minPoolSize">1</property>

          <propertyname="maxStatements">0</property>

      </user-overrides>

   </default-config>

   <named-configname="toto">

      <propertyname="initialPoolSize">5</property>

      <propertyname="maxPoolSize">20</property>

      <propertyname="driverClass">com.mysql.jdbc.Driver</property>

      <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/day14</property>

      <propertyname="user">root</property>

      <propertyname="password">123456</property>

   </named-config>

</c3p0-config>

 

 

这时写好的JdbcUtils是:

package cn.toto.utils;

 

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

importjavax.sql.DataSource;

 

import com.mchange.v2.c3p0.ComboPooledDataSource;

 

publicclass JdbcUtils {

   privatestaticDataSourceds;

   

   static {

      //ds = new ComboPooledDataSource();//默认的缺省的配置

      ds =new ComboPooledDataSource("toto");//配置文件中设置的内容不用写其他的是因为它可以自动查找classloader下的c3p0-config.xml文件(要注意的是文件的名称必须是c3p0-config.xml)如果文件的名称不是这个,将出现错误。

   }

   

   //获取与指定数据的连接

   publicstaticDataSourcegetSource(){

      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;

      }

   }

 

}

02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写