加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

C3P0连接池的运行

发布时间:2021-11-13 11:21:56 所属栏目:PHP教程 来源:互联网
导读:一、什么是C3P0 我们开始实现了一个自定义的连接池,那么C3P0连接池和我们自定义那个就差不多了,只是它是一个开源的,比我们自己实现的要强大很多的连接池。下面为百科上的定义: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JD

一、什么是C3P0
 
      我们开始实现了一个自定义的连接池,那么C3P0连接池和我们自定义那个就差不多了,只是它是一个开源的,比我们自己实现的要强大很多的连接池。下面为百科上的定义:
 
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
 
二、如何使用C3P0
 
    首先我们先要引入C3P0的jar包,(当然连接mysql是少不了mysql的驱动包的),我这里因为使用的Maven,就直接引入到pom文件中了
 
<dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>
然后我们使用的时候就直接new出ComboPooledDataSource对象就可以了 ,然后去设置它的一些需要连接数据库的参数,如下:
 
ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8");
        dataSource.setUser("root");
        dataSource.setPassword("root");
那么,一个最简单的C3P0就可以使用了,我们就可以像JDBC那样去获得连接,使用连接了,完整测试代码如下:
 
public static void main( String[] args ) throws SQLException, PropertyVetoException
    {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        Connection conn = dataSource.getConnection();
        String sql = "select * from user where u_id = ?";
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(sql);
            ps.setInt(1, 1);
            rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("id="+rs.getInt(1));
                System.out.println("username="+rs.getString(2));
                System.out.println("password="+rs.getString(3));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils_V3.close(conn, ps, rs);//这是本人自己封装的一个关闭资源的方法,非C3P0所提供
        }
    }
OK,一个简单的C3P0使用测试案例就完成了,但是,为了避免硬编码,C3P0提供对配置文件的引入,支持xml,和properties文件,我这里就使用xml文件,properties不做介绍
 
文件如下:
 
<?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/test</property>
    <property name="user">root</property>
    <property name="password">root</property>
    <!-- 初始化连接池的连接数 -->
    <property name="initialPoolSize">5</property>
    <!-- 连接池中最大的连接数 -->
    <property name="maxPoolSize">20</property>
  </default-config>
  
  <!-- 当需要使用这里的配置时只需要在创建对象的时候传入这个的name值,即Oracle -->
  <named-config name="oracle">
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql:///web_07</property>
    <property name="user">root</property>
    <property name="password">123</property>
  </named-config>
  
 
</c3p0-config>
其中注释都已经很清楚,值得注意的是,C3P0默认配置文件的路径是在classpath下,且文件名必须为c3p0-config.xml;当然,C3P0的配置不会这么简单,还有很多配置项是可以去配置优化的,详细可以去官网查看文档介绍,会更好。
 
配置文件方式的测试代码如下:
 
public static void main( String[] args ) throws SQLException, PropertyVetoException
    {
        //因为有配置文件存在且在类路径下,所以创建此对象的时候就会去加载默认路径下名为c3p0-config.xml的配置文件
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
//        dataSource.setDriverClass("com.mysql.jdbc.Driver");
//        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8");
//        dataSource.setUser("root");
//        dataSource.setPassword("root");
        Connection conn = dataSource.getConnection();
        String sql = "select * from user where u_id = ?";
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(sql);
            ps.setInt(1, 1);
            rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("id="+rs.getInt(1));
                System.out.println("username="+rs.getString(2));
                System.out.println("password="+rs.getString(3));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils_V3.close(conn, ps, rs);//这是本人自己封装的一个关闭资源的方法,非C3P0所提供
        }
    }
OK,c3p0的使用就这样了 。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读