如题:自己配置了c3p0,项目结构如下:C3p0.properties中配置了数据库和c3p0的链接数据;具体如下:链接可以被创建但是后期使用过程中总是报too many connection;
想请教各位大神,这是什么原因,是我的配置的原因还是我关闭链接的方式不正确
关闭方式如下:使用方式如下:

解决方案 »

  1.   

    C3P0ConnentionProvider类是一个c3p0初始化类;代码如下
    package com.cn.piaoju.db.util;
    /**
     * 初始化c3p0
     */
    import java.io.FileInputStream;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Properties;import javax.sql.DataSource;import com.mchange.v2.c3p0.DataSources;public class C3P0ConnentionProvider {
    private static final String JDBC_DRIVER = "driverClass";
    private static final String JDBC_URL = "jdbcUrl";
    private static DataSource ds;
    /**
     * 初始化连接池代码块
     */
    static {
    initDBSource();
    }
    /**
     * 初始化c3p0连接池
     */
    private static final void initDBSource() {
    Properties c3p0Pro = new Properties();
    try {
    // 加载配置文件
    String path = C3P0ConnentionProvider.class.getResource("/")
    .getPath();
    String websiteURL = (path.replace("/build/classes", "")
    .replace("%20", " ").replace("classes/", "") + "c3p0.properties")
    .replaceFirst("/", "");
    FileInputStream in = new FileInputStream(websiteURL);
    c3p0Pro.load(in);
    } catch (Exception e) {
    e.printStackTrace();
    } String drverClass = c3p0Pro.getProperty(JDBC_DRIVER);
    if (drverClass != null) {
    try {
    // 加载驱动类
    Class.forName(drverClass);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } } Properties jdbcpropes = new Properties();
    Properties c3propes = new Properties();
    for (Object key : c3p0Pro.keySet()) {
    String skey = (String) key;
    if (skey.startsWith("c3p0.")) {
    c3propes.put(skey, c3p0Pro.getProperty(skey));
    } else {
    jdbcpropes.put(skey, c3p0Pro.getProperty(skey));
    }
    } try {
    // 建立连接池
    DataSource unPooled = DataSources.unpooledDataSource(
    c3p0Pro.getProperty(JDBC_URL), jdbcpropes);
    ds = DataSources.pooledDataSource(unPooled, c3propes); } catch (SQLException e) {
    e.printStackTrace();
    }
    } /**
     * 获取数据库连接对象
     * 
     * @return 数据连接对象
     * @throws SQLException
     */
    public static synchronized Connection getConnection() throws SQLException {
    final Connection conn = ds.getConnection();
    conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
    return conn;
    }
    }
      

  2.   

    另外我将dbUti类设置成单例模式,这样有问题吗?
    private dbUtil() {
    }
    private static final dbUtil db = new dbUtil();
    // 静态工厂方法
    public static dbUtil getdb() {
    return db;
    }