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配置文件

内容如下:


<c3p0-config>
    <named-config name="c3p0">
    
    
    <property name="driverClass">com.mysql.jdbc.Driverproperty>
    
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8property>
    
    <property name="user">rootproperty>
    
    <property name="password">property>
    
    <property name="acquireIncrement">5property>
    
    <property name="initialPoolSize">10property>
    
    <property name="minPoolSize">10property>
    
    <property name="maxPoolSize">50property>

    
    <property name="maxStatements">50property>
    
    <property name="maxStatementsPerConnection">10property>
    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);

你可能感兴趣的:(mysql,javaweb,数据库,c3p0,java,数据库连接池)