JDBC 学习复习8 C3P0数据源使用

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

c3p0与dbcp区别

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

导入相关jar包
 c3p0-0.9.2-pre1.jar、mchange-commons-0.2.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-0.9.2-pre1.jar
在类目录下加入C3P0的配置文件:c3p0-config.xml
c3p0-config.xml的配置信息如下:
配置了3个 一个默认和 的是 msyql 的,还要一个oracle 有需自取 改下配置就可以了

<?xml version="1.0" encoding="UTF-8"?>
<!--
c3p0-config.xml必须位于类路径下面
private static ComboPooledDataSource ds;
static{
    try {
        ds = new ComboPooledDataSource("MySQL");
    } catch (Exception e) {
        throw new ExceptionInInitializerError(e);
    }
}
-->

<c3p0-config>
    <!--
    C3P0的缺省(默认)配置,
    如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源
    -->
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/lieweb</property>
        <property name="user">root</property>
        <property name="password"></property>
        
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">5</property>
        <property name="maxPoolSize">20</property>
    </default-config>

    <!--
    C3P0的命名配置,
    如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("Oracle");”这样写就表示使用的是name是MySQL的配置信息来创建数据源
    -->
    <named-config name="Oracle">
        <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="user">scott</property>
        <property name="password">tiger</property>
        
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">5</property>
        <property name="maxPoolSize">20</property>
    </named-config>
    
     <!--
    C3P0的命名配置,
    如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源
    -->
    <named-config name="MySQL">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/libweb</property>
        <property name="user">root</property>
        <property name="password"></property>
        
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">5</property>
        <property name="maxPoolSize">20</property>
    </named-config>

</c3p0-config>

使用C3P0的数据库 工具类代码如下

package dbex;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBUtil3 {
    
    private static ComboPooledDataSource ds = null;
    static{
        try {
            
             //通过代码创建C3P0数据库连接池
            /*ds = new ComboPooledDataSource();
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/libweb");
            ds.setUser("root");
            ds.setPassword("");
            ds.setInitialPoolSize(10);
            ds.setMinPoolSize(5);
            ds.setMaxPoolSize(20);*/
            //通过读取C3P0的xml配置文件创建数据源,C3P0的xml配置文件c3p0-config.xml必须放在src目录下
            
            ds = new ComboPooledDataSource("MySQL");
            
        } catch (Exception e) {
            System.out.println(DBUtil3.class.toString()+":"+e.getMessage());
            e.printStackTrace();
        }
    }
    /**
     * 
     * @Title: geteConnection 
     * @Description: 获取数据库连接
     * @param @return
     * @param @throws SQLException    
     * @throws
     */
    public static Connection getConnection() throws SQLException{
        return ds.getConnection();
    }
    /**
     * 
     * @Title: release 
     * @Description:释放资源 
     * @param     
     * @throws
     */
    public static void release(Connection conn,PreparedStatement ppst,ResultSet rs){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(ppst!=null){
            try {
                ppst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * @throws SQLException 
     * 
     * @Title: main 
     * @Description:最好写个 JUnit 测试类咯   @Test 的方式  可以参考我的博文 
     * @param @param args    
     * @throws
     */
     public static void main(String[] args) throws SQLException {
         Connection conn=null;
            PreparedStatement ppst =null;
            ResultSet rs= null;
            
            conn =DBUtil3.getConnection();
            System.out.println(conn);
            ppst = conn.prepareStatement("select * from user");
            rs=ppst.executeQuery();
            while(rs.next()){
                System.out.println(rs.getInt(1)+"\t"+rs.getString(2));
            }
            DBUtil3.release(conn, ppst, rs);
        }
}

测试效果-mysql
1128666-20171203013545366-1383209087.png

测试效果-oracle
1128666-20171203014638882-1761238909.png

转载于:https://www.cnblogs.com/humi/p/7958041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值