C3PO数据库连接池

来源:互联网 发布:周立功linux开发板 编辑:程序博客网 时间:2024/05/16 05:44

一、数据库连接池原理

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

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

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

二、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);
原创粉丝点击