JDBC学习04-C3P0连接池:下载和使用方法

来源:互联网 发布:网络运营培训班 编辑:程序博客网 时间:2024/06/01 10:21

一、C3P0简介
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
二、C3P0的使用方法
使用第三方工具需要导入jar包,C3P0使用时还需添加配置文件c3p0-config.xml。
0.下载
https://sourceforge.net/projects/c3p0/files/latest/download?source=files下载最新的C3PO包。
这里写图片描述
下载完成后解压
这里写图片描述
·doc为说明文档,examples是自带的例子,lib是一些jar包,src是源码jar包。
1.导入jar包
将lib文件夹中c3p0-0.9.5.2.jar和mchange-commons-java-0.2.11.jar导入项目中
这里写图片描述
这里写图片描述
2.编写配置文件
配置文件名称:c3p0-config.xml (固定)
配置文件位置:CLASSPATH(WEB-INF/classes、src)
这里写图片描述
配置文件内容:
default-config和named-config暂时内容相同

<?xml version="1.0" encoding="UTF-8"?><c3p0-config>    <default-config>        <property name="user">root</property>        <property name="password">anitamui</property>        <property name="driverClass">com.mysql.jdbc.Driver</property>        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=true</property>        <!--以上的user是数据库的用户,password是数据库的密码,driverClass是mysql的数据库驱动,jdbcUrl是连接数据库的url -->        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->        <property name="acquireIncrement">5</property>        <!--初始化时获取十个连接,取值应在minPoolSize与maxPoolSize之间 -->        <property name="initialPoolSize">10</property>        <!--连接池中保留的最小连接数 -->        <property name="minPoolSize">10</property>        <!--连接池中保留的最大连接数 -->        <property name="maxPoolSize">50</property>        <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->        <property name="maxStatements">20</property>        <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->        <property name="maxStatementsPerConnection">5</property>    </default-config>    <named-config name="mysql">        <property name="user">root</property>        <property name="password">anitamui</property>        <property name="driverClass">com.mysql.jdbc.Driver</property>        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=true</property>        <property name="acquireIncrement">5</property>        <property name="initialPoolSize">10</property>        <property name="minPoolSize">10</property>        <property name="maxPoolSize">50</property>        <property name="maxStatements">20</property>        <property name="maxStatementsPerConnection">5</property>    </named-config></c3p0-config>

3.测试C3P0使用
C3P0中连接池的实现类名ComboPooledDataSource
加载配置文件可以加载默认配置也可以加载带名字的配置,方法在下面代码中

import com.mchange.v2.c3p0.ComboPooledDataSource;import org.junit.Test;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class TestC3p0 {    @Test    public void testSelect() {        Connection conn = null;        PreparedStatement pstmt = null;        ResultSet rs = null;        //1.创建自定义连接池对象        //此种方法加载的配置文件中默认配置default-config        ComboPooledDataSource dataSource = new ComboPooledDataSource();        //加载有名称的配置named-config        //ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");        try {            //2.从池中获取对象(改造过后)            conn = dataSource.getConnection();            //3.编写SQL语句            String sql="select * from fruits where s_id=?";            //4.获取执行sql语句的对象            pstmt = conn.prepareStatement(sql);            //5.设置参数            pstmt.setInt(1,104);            //6.执行            rs = pstmt.executeQuery();            //7.处理结果集            while (rs.next()){                System.out.println(rs.getString("f_name"));            }        } catch (SQLException e) {            e.printStackTrace();        } finally {            if(rs!=null){                try {                    rs.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }            if(pstmt!=null){                try {                    pstmt.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }            if(conn!=null) {                try {                    conn.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }        }    }}

运行结果
这里写图片描述
·其中红色字体为日志信息,运行结果为找到s_id等于104的水果名称berry,lemon。
4.编写C3P0工具类

import com.mchange.v2.c3p0.ComboPooledDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.SQLException;/** * C3P0工具类 */public class C3P0Utils {    private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");    /**     * 获取连接池对象     * @return     */    public static DataSource getDataSource(){        return dataSource;    }    /**     * 从池中获取连接对象     * @return     */    public static Connection getConnection(){        try {            return dataSource.getConnection();        } catch (SQLException e) {            throw new RuntimeException(e);        }    }    /**     * 释放资源     * @param connection     */    public static void releaseConnection(Connection connection){        try {            if(connection != null ) {                connection.close();            }        }catch (Exception e) {            e.printStackTrace();        }    }}

测试工具类的使用

@Test    public void testSelect02() {        Connection conn = null;        DataSource dataSource = null;        PreparedStatement pstmt = null;        ResultSet rs = null;        try {            conn = C3P0Utils.getConnection();            String sql="select * from fruits where s_id=?";            pstmt = conn.prepareStatement(sql);            pstmt.setInt(1,104);            rs = pstmt.executeQuery();            while (rs.next()){                System.out.println(rs.getString("f_name"));            }        } catch (SQLException e) {            e.printStackTrace();        } finally{            C3P0Utils.releaseConnection(conn,pstmt,rs);        }    }
原创粉丝点击