当前位置: 代码迷 >> Java Web开发 >> c3p0 运作50次后报错了 大侠帮忙看看
  详细解决方案

c3p0 运作50次后报错了 大侠帮忙看看

热度:9712   发布时间:2016-04-10 22:53:00.0
c3p0 运行50次后报错了 大侠帮忙看看
这是我配置的c3p0

package com.forward.five.untils;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3p0Until {
/***
 * 连接数据库用到的常量
 */
private static ComboPooledDataSource cpd = null;
final String className="com.mysql.jdbc.Driver";
final String url="jdbc:mysql://127.0.0.1:3306/manager";
final String username="root";
final String password="";
private  Connection conn=null;
private ResultSet rs=null;
private Statement st=null;
/**
 * 声明本类的对象
 */
private static C3p0Until cp = null ;
/**
 * 构造函数
 * 配置c3p0
 */
private   C3p0Until(){
cpd = new ComboPooledDataSource();
cpd.setUser(username);
cpd.setPassword(password);
cpd.setJdbcUrl(url);
try {
cpd.setDriverClass(className);
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cpd.setInitialPoolSize(20);
cpd.setMaxPoolSize(200);
cpd.setMinPoolSize(10);
cpd.setMaxStatements(0);
cpd.setMaxIdleTime(0);
//cpd.setMaxStatements(50);
}
/**
 *  加锁
 * 类的入口
 * @return
 */
public synchronized static C3p0Until getC3p0Until(){
if(cp == null){
cp = new C3p0Until();
}
return cp;
}
/**
 * 连接数据库
 * @return
 * @throws ClassNotFoundException
 * @throws SQLException
 */
public  Connection getConnection() throws ClassNotFoundException, SQLException{

return cpd.getConnection();

}
/**
 * 执行sql语句
 * @param sql
 * @return
 * @throws SQLException
 * @throws ClassNotFoundException
 */
public ResultSet executeQuery(String sql) throws SQLException, ClassNotFoundException{
conn=this.getConnection();
st=conn.createStatement();
return rs=st.executeQuery(sql);
}
/**
 * 关闭数据库
 * @param rs
 * @param st
 * @param conn
 */
public  void close(ResultSet rs, Statement st, Connection conn) {

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



这是错误
------解决方案--------------------
楼主检查下代码,看看执行完jdbc后有没有close掉。
我估计是没有调用close方法。
------解决方案--------------------
已经告诉你是没有更多的了。
你使用的完有释放连接吗
------解决方案--------------------
mysql的连接接数用完了

查看连接数:
show variables like 'max_connections';

默认应该是100
------解决方案--------------------
配置不合理导致的,数据源参数就用默认的就好了,特殊情况下再手工配置
  相关解决方案