天天看点

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



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

它提供的构造方法有:

通过第三个构造方法读取配置文件,它的配置文件是一个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("属性不匹配的错误");

}

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

static datasource getsource(){

return

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

static connection getconnection()

throws sqlexception {

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

ds.getconnection();

//释放资源

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

stmt.close();

stmt=null;

if(conn!=null){

conn.close();

conn = null;

用于测试的主方法:

package cn.toto.demo;

import cn.toto.utils.jdbcutils;

class demo {

void main(string[] args)

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>

name="checkouttimeout">30000</property>

name="idleconnectiontestperiod">30</property>

name="initialpoolsize">10</property>

name="maxidletime">30</property>

name="maxpoolsize">100</property>

name="minpoolsize">10</property>

name="maxstatements">200</property>

<user-overrides

user="test-user">

name="maxpoolsize">10</property>

name="minpoolsize">1</property>

name="maxstatements">0</property>

</user-overrides>

</default-config>

<named-config

name="toto">

name="initialpoolsize">5</property>

name="maxpoolsize">20</property>

name="driverclass">com.mysql.jdbc.driver</property>

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

name="user">root</property>

name="password">123456</property>

</named-config>

</c3p0-config>

这时写好的jdbcutils是:

import

javax.sql.datasource;

datasourceds;

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

ds =

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

datasourcegetsource(){