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



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

这里获得数据源使用的方法是: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_test</property>

<property
</property>

<property
</property>

<property
</property>

<property
</property>

<property
</property>

<property
</property>

<property
</property>

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

<property
</property>

<property
</property>

<property
</property>

</user-overrides>

</default-config>

<named-config
name="toto">

<property
</property>

<property
</property>

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

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

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

<property
</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
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;

}

}

}

上一篇:Linux的DNS配置2-主从服务器


下一篇:【原创】大叔经验分享(3)hbase client 如何选择