使用c3p0创建连接池

使用C3P0创建连接池需要的jar包:

c3p0-0.9.2-pre1.jar
mchange-commons-0.2.jar
c3p0-oracle-thin-extras-0.9.2-pre1.jar //oracle 数据库还需要此jar包

使用此C3P0创建连接池有两种方式,一个是不基于配置文件的,直接在代码中写死。另外一中是基于配置文件的方法,配置文件,可以是xml文件(c3p0-config.xml),properties文件(c3p0.properties),这些文件必须在classloader resource 目录下。即SRC目录下,或者是指定系统属性(System properties)。示例如下:

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcC3p0Pools {
//方法一;通过代码中直接写死,不灵活
public static Connection getConnection() throws SQLException {
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
ds.setUser("root");
ds.setPassword("850828");
ds.setMaxPoolSize(40);
ds.setMinPoolSize(10);
ds.setInitialPoolSize(20);

Connection conn = ds.getConnection();
return conn;
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}

}
//使用xml配置文件,此xml
public static Connection getConnection2() throws SQLException{
ComboPooledDataSource ds = new ComboPooledDataSource("wl");
return ds.getConnection();
}
public static void release(Connection conn, Statement st, ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs = null;
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
st = null;
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conn = null;
}
}
}

XML配置很灵活,可以为多个应用进行数据配置。在获取连接时,可以指定特定的配置。同时支持一个默认配置,要是没找到指定配置,将使用默认配置。

c3p0-config.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置-->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
<property name="user">root</property>
<property name="password">root</property>

<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
<!--mysql使用此配置 -->
<named-config name="mysql">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property>
<property name="user">root</property>
<property name="password">root</property>

<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>

<!-- orcale 配置-->
<named-config name="oracle">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
<property name="user">root</property>
<property name="password">root</property>

<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config>
</c3p0-config>


//示例:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.Test;
import cn.itcast.utils.JdbcC3p0Pools;

public class Demo5 {

private Connection conn = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
private String sql = null;


@Test
public void query(){
try{ 
// conn = JdbcC3p0Pools.getConnection();
conn = JdbcC3p0Pools.getConnection2();

sql = "select name, money from account";
ps = conn.prepareStatement(sql);

rs = ps.executeQuery();
while(rs.next()){
System.out.print("name:"+rs.getString("name"));
System.out.println("--money:"+rs.getFloat("money"));
}

}catch(Exception e){
e.printStackTrace();
}
finally{
JdbcC3p0Pools.release(conn, ps, rs);
}
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值