数据库连接池 数据源之C3P0

C3P0:

开源的数据库连接池。实现了数据源和JNDI的绑定,支持JDBC3和JDBC2的规范。

目前数据框架使用这些数据源配置 (Hibernate5,SpringData) 动态代理模式

JNDI:Java Naming Directory Interface: java命名目录接口规范。

目的:用户只关注结果,过程不关心(例如:驱动是什么,地址什么?。。。)

DBCP和C3P0区别:

DBCP没有自动回收空闲连接的功能。

C3P0能自动回收空闲连接

操作步骤

1.添jar包

这里写图片描述

2.C3P0配置文件(放在src根目录下)

用的时候 改一下数据库就行了
名字: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/mvc</property>
         <property name="user">root</property>
         <property name="password">123456</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> 

     </default-config>

 </c3p0-config>

3.C3P0的Util工具类

package com.qf.util;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Util {
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); 
    //获取连接
    public static Connection getConnection(){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("服务器繁忙");
        }
    }
     //释放资源
    public static void release(ResultSet rs,Statement stmt,Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            rs=null;
        }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            stmt=null;
        }
        if(conn!=null){
            try {
                conn.close();//运行的时候检查调用自己重写的 close() 连接还回取
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            conn=null;
        }
    }
}

4.C3P0测试类

package com.qf.c3p0.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.junit.Test;

import com.qf.util.C3P0Util;

public class C3P0TestCURD {
    @Test
   public void testInsert(){
        Connection conn =null;
        PreparedStatement ps=null;
       try {
           conn= C3P0Util.getConnection();
           ps = conn.prepareStatement("insert into account values (null,'fff',1000)");
           int i = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            C3P0Util.release(null, ps, conn);
        }
   }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值