C3P0--数据库连接池

1.简介

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展

c3p0与dbcp区别

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

  c3p0有自动回收空闲连接功能

2.加入 C3P0 数据源

   1) 加入c3po和数据库驱动的jar包,其中c3p0.jar的网址

        c3p0-0.9.5.jar,mysql-connector-java-5.0.3-bin.jar

   2)加c3po配置文件,可以参考网址http://www.mchange.com/projects/c3p0/或文件目录c3p0-0.9.5.bin.zipc3p0-0.9.5docindex.html

      下的Appendix B: Configuation Files, etc. c3p0-config.xml的例子

     如下为一个简单的例子:

<?xml version="1.0" encoding="UTF-8"?>
<
c3p0-config> <!-- This app is massive! --> <named-config name="mvcApp"> <!-- 连数据库的基本信息 --> <property name="user">root</property> <property name="password">root</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///test</property> <!-- 连接池基本信息 --> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">10</property> <property name="maxPoolSize">50</property> <!-- mvcApp adopts a different approach to configuring statement caching --> <property name="maxStatements">20</property> <property name="maxStatementsPerConnection">5</property> </named-config> </c3p0-config>

 在JbbcUtils工具类中获取数据库连接如下:

package com.milan.db;

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

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * jdbc操作工具类
 * @author milan
 * @TODO
 * @Date 2015-1-18
 */
public class JdbcUtils {
    
    private static DataSource dataSource = null;
    
    static{
        dataSource = new ComboPooledDataSource("mvcApp");//与定义的named-config的name属性值相同
    }

    /**
     * 关闭数据库连接
     * @param conn
     */
    public static void releaseConnection(Connection conn){
        try{
            if(conn != null){
                conn.close();
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    
    /**
     * 获取数据源的一个Connection对象
     * @return
     * @throws SQLException 
     */
    public static Connection getConnection() throws SQLException{
        return dataSource.getConnection();
    }
}

写完后,用Junit测试getConnection(),报如下错误:

    

  发现引入:mchange-commons-java-0.2.9.jar就好了

  如此c3p0的环境就搭好了

  在写好BaseDao后测试数据添加,发现一个问题:

      后台添加数据时,数据中包含中文字符,添加到数据库时该中文字符均显示???

      此时,数据库编码也设置为utf-8,数据表也设置编码为utf-8

 最后解决方法:

    jdbcUrl后添加编码设置:

<property name="jdbcUrl">jdbc:mysql:///test?characterEncoding=UTF-8</property>
原文地址:https://www.cnblogs.com/javamilan/p/4232177.html