C3P0初学者的配置

2 篇文章 0 订阅
2 篇文章 0 订阅

一、概述
没有连接池的情况下,我们每次请求数据库,都需要建立一次数据库连接,数据库的每次连接都非常消耗资源。连接池的作用就是预先创建比如十个连接,第一个用户连接使用完了,下一个用户还可以继续用连接池里面的这个连接。这样就大大节省了和数据库连接的次数。
二、C3p0配置。

  1. 下载包c3p0-0.9.1.2.jar、mysql-connector-java-5.0.8-bin.jar放入WEB-INF/Lib,然后记得add Build Path,不然写代码的时候,没法引用。Lib里面的jar包是服务运行的时候需要的。
  2. 在src底下建立一个文件夹c3p0-config.xml,先不要管为什么,就直接放入src目录底下,不要放入子目录。
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
   <!--默认配置-->
    <default-config>  
        <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>  
    </default-config>  

   <!--配置连接池mysql-->
    <named-config name="mysql">  
        <property name="driverClass">com.mysql.jdbc.Driver</property>  
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/study</property>  
        <property name="user">root</property>  
        <property name="password">zjxn0916</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>  
    </named-config>  
    <!--配置连接池2-->
    ......
</c3p0-config>
  1. 编写数据源也称地址池,一下代码主要的是ComboPooledDataSource(“mysql”),ComboPooledDataSource这个是C3P0jar包里面的。通过这个自动从c3p0-config.xml读取信息。还要注意Connect、PreparedStatement 、ResultSet 都是从java.sql包里面取的,不要从jave.mysql里面取,有时间想想为什么,因为,我们引入mysql包,由C3P0按照java规范,实现了数据库的连接、语句操作。java的规范接口是最顶级的。我们不用关心C3P0怎么和mysql建立连接或者语句操作。我们用java的规范接口进行编程,然后由C3P0的实现类去做就ok了。
public class C3P0Util {
static org.apache.log4j.Logger logger=org.apache.log4j.Logger.getLogger(C3P0Util.class.getName());

    //通过标识名来创建相应连接池
    static ComboPooledDataSource dataSource=new ComboPooledDataSource("mysql");
    //从连接池中取用一个连接
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();

        } catch (Exception e) {
            logger.error("Exception in C3p0Utils!", e);
            throw new Error("数据库连接出错!", e);            
        }
    }    
    //释放连接回连接池
     public static void close(Connection conn,PreparedStatement pst,ResultSet rs){  
            if(rs!=null){  
                try {  
                    rs.close();  
                } catch (SQLException e) {  
                    logger.error("Exception in C3p0Utils!", e);
                    throw new Error("数据库连接关闭出错!", e);            
                }  
            }  
            if(pst!=null){  
                try {  
                    pst.close();  
                } catch (SQLException e) {  
                    logger.error("Exception in C3p0Utils!", e);
                    throw new Error("数据库连接关闭出错!", e);    
                }  
            }  

            if(conn!=null){  
                try {  
                    conn.close();  
                } catch (SQLException e) {  
                    logger.error("Exception in C3p0Utils!", e);
                    throw new Error("数据库连接关闭出错!", e);    
                }  
            }  
        }  
}
  1. 语句测试:Test都用过吧,右键run as–Junit Test就直接执行此类了。
 public class TestCRUD {
    @Test
    public void testInsert(){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = C3P0Util.getConnection();
            ps = conn.prepareStatement("insert into users(username) values('ggg')");
            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            C3P0Util.close(conn, (com.mysql.jdbc.PreparedStatement) ps, rs);
        }
        System.out.println(conn.getClass().getName());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值