zoukankan      html  css  js  c++  java
  • c3p0数据源的使用

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

    c3p0与dbcp区别:

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

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

    c3p0的实现由三种方式,

    一种手动在方法里添加数据库连接,即在setter方法里传数据库连接和配置的参数

    一种自定义properties文件或XML文件,配置相关数据库信息,然后手动解析

    一种定义默认的配置文件,properties文件为c3p0.properties,XML文件为c3p0-config.xml

    使用默认的配置文件c3p0会自动帮我们解析,只需把参数传入配置文件就可以使用了,相当方便

    这里简单介绍下第三种使用默认配置文件的用法,以xml文件为例

    配置文件c3p0-config.xml(只配置了一些必须的参数,更多可配置参数参看官方文档)

    <?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/blogs_stu</property>
            <property name="user">root</property>
            <property name="password"></property>
            <property name="initialPoolSize">10</property>
            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
        </default-config> 
        <named-config name="intergalactoApp">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/blogs_stu</property>
            <property name="user">root</property>
            <property name="password"></property>
            <property name="initialPoolSize">10</property>
            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
        </named-config>
    </c3p0-config>

    工具类C3P0Util

    public class C3P0Util {
        private static ComboPooledDataSource cpds=new ComboPooledDataSource();
        public static Connection getConnection(){
            try {
                return cpds.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
        public static void release(Connection conn,Statement stmt,ResultSet rs){
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                conn=null;
            }
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                stmt=null;
            }
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                rs=null;
            }
        }
    }

    可以看到C3P03的使用相当简单

    打印通过c3p0方式获取的Connection对相关

    public class Test6{
        public static void main(String[] args) throws SQLException  {
            Connection conn=C3P0Util.getConnection();
            System.out.println(conn.getClass().getName());
        }

    通过名字容易发现,与dbcp的装饰模式不用,c3p0使用的方式是代理模式,通过代理类对close方法进行扩展,将不用的连接放回连接池中。

  • 相关阅读:
    Thinkphp 中的自动验证 上一篇有例子
    Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
    ThinkPHP框架 祖辈分的理解 【儿子 FenyeController】继承了【父亲 FuController】继承了【祖辈 Controller】的
    ThinkPHP框架 AJAX方法返回 AJAX实现分页例子:
    ThinkPHP框架 【 AJAX方法返回 】 例子:简单添加一条数据 和 查询一个表里的数据
    thinkPHP框架 简单的删除和修改数据的做法 和 模板继承的意思大概做法
    cookie 和 session 的区别
    ThinkPHP框架 表单传值自动验证!!
    UVA 11624 Fire! (bfs)
    POJ 3074 Sudoku (Dacing Links)
  • 原文地址:https://www.cnblogs.com/pokid/p/5818933.html
Copyright © 2011-2022 走看看