C3PO数据库连接池

一、数据库连接池原理

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。

使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。

同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

二、C3PO数据库连接池

所需jar文件:

1)c3p0-0.9.2-pre1.jar

2)mchange-commons-0.2.jar

3)mysql-connector-java-5.1.7-bin.jar

首页,下载以上jar包,放到项目的lib目录下,并build path

其次,编写c3po-config.xml配置文件

内容如下:

<?xml version ="1.0" encoding="UTF-8"?>
<c3p0-config>
    <named-config name="c3p0">
    <!-- 指定数据库连接源的基本属性 -->
    <!--MySQL数据库驱动程序-->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <!--MySQL数据库地址-->
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8</property>
    <!--MySQL数据库用户名-->
    <property name="user">root</property>
    <!--MySQL数据库密码-->
    <property name="password"></property>
    <!-- 若数据库连接数不足时,一次向数据库服务器申请多少个连接 -->
    <property name="acquireIncrement">5</property>
    <!-- 初始化数据库连接池时的连接数量 -->
    <property name="initialPoolSize">10</property>
    <!-- 数据库连接池中的最小连接数量 -->
    <property name="minPoolSize">10</property>
    <!-- 数据库连接池中的最大连接数量 -->
    <property name="maxPoolSize">50</property>

    <!-- C3P0数据库连接池可以维护的statement的个数 -->
    <property name="maxStatements">50</property>
    <!-- 每个连接可以同时使用的statement对象的个数 -->
    <property name="maxStatementsPerConnection">10</property>
    </named-config>
</c3p0-config>

接着,在src下的工具类包(一般包名是xx.xxx.utils)里面创建一个DBUtil.java文件,内容如下:

package com.poster.dby.utils;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.PreparedStatement;
import java.sql.Connection;

public class DBUtil {
    private static ComboPooledDataSource comboPooledDataSource = null;
        //静态代码块
        static{
            /* * 读取c3p0的xml配置文件创建数据源,c3p0的xml配置文件c3p0-config.xml必须放在src目录下 * 使用c3p0的命名配置读取数据源 */
            comboPooledDataSource = new ComboPooledDataSource("c3p0");
        }
        //从数据源中获取数据库的连接
        public static Connection getConnection() throws SQLException {
                return comboPooledDataSource.getConnection();
        }
        //释放资源,将数据库连接还给数据库连接池
        public static void closeDB(Connection conn,PreparedStatement ps,ResultSet rs) {
                try {
                    if (rs!=null) {
                        rs.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally{
                    try {
                        if (ps!=null) {
                            ps.close();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally{
                        try {
                            if (conn!=null) {
                                conn.close();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
        }
        //释放资源,将数据库连接还给数据库连接池
        public static void closeDB(PreparedStatement ps,Connection conn) {
             try {
                if (ps!=null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally{
                try {
                    if (conn!=null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
}

最后,在操作数据库的时候,使用

Connection conn = DBUtil.getConnection();

即可获取连接。

最后的最后,不要忘记关闭数据库哦

//用来回收连接,适用于删改查
DBUtil.closeDB(rs,ps,conn);

//用来回收连接,适用于增
DBUtil.closeDB(ps,conn);
全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务