c3p0的连接

Posted 1950137408

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c3p0的连接相关的知识,希望对你有一定的参考价值。

package dbutils;

import java.beans.PropertyVetoException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.management.InstanceAlreadyExistsException;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.apache.commons.dbcp.DataSourceConnectionFactory;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.PoolBackedDataSource;

/**
 * JDBC工具类
 * 
 * @author Administrator
 * 
 */
public class C3p0Utils {
    /*
     * 连接数据库的用户名
     */
    private String user = null;
    /*
     * 连接数据库的密码
     */
    private String password = null;
    /*
     * 连接数据库的地址
     */
    private String url = null;
    /*
     * 连接数据的驱动
     */
    private String driver = null;
    /*
     * 数据库链接工厂
     */
    private  ComboPooledDataSource c3p0  = null;

    // 写构造函数 让其不能通过new 来创建对象
    private C3p0Utils() {
        InputStream in = C3p0Utils.class.getClassLoader().getResourceAsStream(
                "db.properties");
        Properties p = new Properties();
        try {
            p.load(in);
            user = p.get("user").toString();
            password = p.get("password").toString();
            url = p.get("url").toString();
            driver = p.get("driver").toString();

            
             c3p0 = new ComboPooledDataSource();
            // 设置用户名
            //basicDataSource.setUsername(user);
            c3p0.setUser(user);
            // 设置密码
            //basicDataSource.setPassword(password);
            c3p0.setPassword(password);
            // 设置地址
            //basicDataSource.setUrl(url);
            c3p0.setJdbcUrl(url);
            // 设置数据库驱动
            //basicDataSource.setDriverClassName(driver);
            c3p0.setDriverClass(driver);

            /*
             * //配置数据库的链接 //初始化连接:连接池启动时创建的初始化连接数量,1.2版本后支持
             * c3p0.setInitialSize(10);
             * //最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制
             * c3p0.setMaxActive(20);
             * //最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制
             * c3p0.setMaxIdle(10);
             * //最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建
             * c3p0.setMinIdle(10);
             */

            // 新建一个数据库链接工厂 进行生产
            //ConnectionFactory = new DataSourceConnectionFactory(basicDataSource);

            Class.forName(driver);
        } catch (IOException e) {
            System.out.println("配置文件读取失败!!!");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("连接驱动信息失败");
            e.printStackTrace();
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
    }

    private static C3p0Utils instance = null;

    // 通过单例模式 为了防止内存消耗过度, 当存在时,返回自己,不存在时,就创建,    只能new一个
    public static C3p0Utils getInstance() {
        if (instance == null) {
                // 连接数据库
                instance = new C3p0Utils();
        }
        return instance;
    }

    /**
     * 获取数据库的连接
     * 
     * @return java.sql.Connection
     */

    public  Connection getConnection() {
        Connection conn = null;
        try { 
            // 连接数据库  
            // conn = DriverManager.getConnection(url, user, password);
            conn = c3p0.getConnection();
        } catch (SQLException e) {
            System.out.println("获取数据库连接失败    ");
            e.printStackTrace();
        }
        return conn;
    }

    /**
     * 关闭资源
     * 
     * @param conn
     * @param stas
     * @param rs
     */
    public  void close(Connection conn, Statement stas, ResultSet rs) {

        try {
            if (rs != null)
                rs.close();
            if (stas != null)
                stas.close();
            if (conn != null)
                conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

 

以上是关于c3p0的连接的主要内容,如果未能解决你的问题,请参考以下文章

C3P0连接池的使用

C3P0连接池操作数据库

C3P0连接池工具类实现步骤及方法

c3p0连接池 & JdbcUtils

数据库连接池c3p0

JDBC连接池之C3P0