当前位置: 代码迷 >> 综合 >> 频繁访问数据库导致too many connection Error preloading the connection pool
  详细解决方案

频繁访问数据库导致too many connection Error preloading the connection pool

热度:42   发布时间:2023-11-19 22:03:16.0

我明明正确关闭了连接,但是还是报错。

后来才知道,如果try ..catch块出了问题的话,就无法正确关闭;

所以需要在catch之后加一个finally

这个是之前报错的错误信息

 这个原因是连接过多,但是没有断开连接,导致的

错误代码如下:

我的代码有很多不足的地方

第一个错误是:没有关闭连接!

主要原因:

当数据库恢复正常时,所有创建的connectionPool都会去连接数据库,从而导致创建大量连接,也可能导致数据库挂掉

我处理的方法是:

把数据库关闭,然后重新打开,连接!

几个小时之后我又修改这个博客,因为我把mysql关闭以后,虽然正常了,但是没过多久又出问题了。

还是这个问题!

这次的处理办法是:

这个我把mysqld.exe进程关闭,然后重启,就好了!

但是,之后还是有问题;

打开mysql的配置文件my.ini或者是my.cnf

把连接数增大;如下
max_connections=500

最根本的办法是在try{

}catch(){

}finally{

在这里关闭连接

}

第二次修改博客的时间是2018/10/20

我之前虽然都关闭连接了,但是3个conn,st,rs写在一个try{}cath(){}finally{关闭三个连接}

总结:

出现这些问题:

不要重启服务器,这个没用的,虽然重启之后正常了,但是没多久又不行,因为是程序问题

一定一定一定一定一定一定一定一定检查程序,关闭连接,关闭连接

多个conn,rs st的一定要分开了,结果集用集合装起来,不要如下:

多个rs放在一起如果出错就会导致其中一个连接无法收回,一直处于阻塞

try{

while(rs.next){

num = rs.getString(1);
                        // 对每个编号进行最近时间的查询基站
                        conn1 = JdbcUtils_DBCP.getConnection();
                        String sqls = "SELECT * FROM yh WHERE number='" + num + "' ORDER BY TIME DESC LIMIT 1";
                        st1 = conn1.prepareStatement(sqls);
                        rs1 = st1.executeQuery();
                        if (rs1.next()) {
                            times = rs1.getString(8);//这个是时间
                            // 判断最后一条记录的时间跟当前时间的距离
                            // 获取当前的时间
                                Date date = new Date();

.........................................

}

}catch(){

}finally{

关闭连接

}

 

  相关解决方案