jdbc连接池&改进dbUtil成C3P0Util

一.jdbc连接池

    1.连接池的存在理由

          前面介绍的dbUtils工具类虽然实现了一个对jdbc的简单封装。但它依旧采取从驱动管理获取连接

         (DriverManager.getConnection(dbUrl, dbUserName, dbPassword)),释放连接的操作。非常消耗系统的资源!

         可以设计一个连接池,来获取con或者存放con

           

           而归还连接的方式不是直接close(),而是返回到连接池

        

     2.自定义一个连接池

        1.sun公司提供了一个连接池的接口(java.sql.dataSourse)

        2.自定义一个连接池,实现该接口

        3.定义一个List集合存放多个连接,从集合中存取(考虑到频繁的存取,用LinkList)

       

public class MyDataSource implements DataSource{
    //1.创建1个容器用于存储Connection对象
    private static LinkedList<Connection> pool = new LinkedList<Connection>();
    
    //2.创建5个连接放到容器中去
    static{
        for (int i = 0; i < 5; i++) {
            Connection conn = DbUtil.getConnection();
            pool.add(conn);
        }
    }
    
    /**
     * 重写获取连接的方法
     */
    @Override
    public Connection getConnection() throws SQLException {
        Connection conn = null;
        //3.使用前先判断
        if(pool.size()==0){
            //4.池子里面没有,我们再创建一些
            for (int i = 0; i < 5; i++) {
                conn = dbUtil.getConnection();
                pool.add(conn);
            }
        }
        //5.从池子里面获取一个连接对象Connection
        conn = pool.remove(0);
        return conn;
    }

    /**
     * 归还连接对象到连接池中去
     */
    public void backConnection(Connection conn){
        pool.add(conn);
    }

 

     3.常见的开源数据库连接池(C3PO和DBCP,以C3P0为例)

          1.导入C3P0连接池所依赖的jar包

        

       2.编写C3PO的配置文件

        

        

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql:///db_</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">20</property>
    </default-config>

    <named-config name="my">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql:///db_</property>
        <property name="user">root</property>
        <property name="password">root</property>
    </named-config>


</c3p0-config>

     3.实现C3P0Util工具类

      

public class C3P0Utils {
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource("my");

    public static DataSource getDataSource() {
        return dataSource;
    }

    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

 

 

      

 

posted @ 2018-01-13 17:01  Goxcheer  阅读(493)  评论(0编辑  收藏  举报