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>