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

 

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

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

它提供的构造方法有:

通过第三个构造方法读取配置文件,它的配置文件是一个 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_test </ property >

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

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

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

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

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

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

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

       user-overrides user = "test-user" >

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

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

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

       </ user-overrides >

    </ default-config >

    named-config name = toto >

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

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

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

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

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

       property name = "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;

import javax.sql.DataSource ;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtils {

    private static DataSource ds ;

    static {

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

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

}

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

    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 ;

}

}

}

原文地址:https://www.cnblogs.com/xiaona19841010/p/5183926.html