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;

 

public class JdbcUtils {

    private static DataSource ds;

   

    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) {

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

       }

    }

   

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

    public static DataSource getSource(){

       return ds;

    }

   

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

    public static Connection getConnection() throws SQLException {

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

       return ds.getConnection();

    }

    //释放资源

    public static void 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;

 

public class Demo {

 

    public static void main(String[] args) throws SQLException {

       Connection conn = JdbcUtils.getConnection();

       System.out.println(conn);

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

    }

 

}

 

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

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

配置文件好后的文件是:

xml version="1.0"encoding="UTF-8"?>

<c3p0-config>

    <default-config>

       <property name="automaticTestTable">con_testproperty>

       <property name="checkoutTimeout">30000property>

       <property name="idleConnectionTestPeriod">30property>

       <property name="initialPoolSize">10property>

       <property name="maxIdleTime">30property>

       <property name="maxPoolSize">100property>

       <property name="minPoolSize">10property>

       <property name="maxStatements">200property>

       <user-overrides user="test-user">

           <property name="maxPoolSize">10property>

           <property name="minPoolSize">1property>

           <property name="maxStatements">0property>

       user-overrides>

    default-config>

    <named-config name="toto">

       <property name="initialPoolSize">5property>

       <property name="maxPoolSize">20property>

       <property name="driverClass">com.mysql.jdbc.Driverproperty>

       <property name="jdbcUrl">jdbc:mysql://localhost:3306/day14property>

       <property name="user">rootproperty>

       <property name="password">123456property>

    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;

 

import javax.sql.DataSource;

 

import com.mchange.v2.c3p0.ComboPooledDataSource;

 

public class JdbcUtils {

    private static DataSourceds;

   

    static {

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

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

    }

   

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

    public static DataSourcegetSource(){

       return ds;

    }

   

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

    public static Connection getConnection() throws SQLException {

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

       return ds.getConnection();

    }

    //释放资源

    public static void 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;

       }

    }

 

}

你可能感兴趣的:(#,c3p0/Druid连接池)