连接池频繁访问数据库导致 Timeout waiting for idle object

在这里插入图片描述
在这里插入图片描述
解决方案:
方案一、
show variables like ‘%timeout’;
set wait_timeout= 57,350,142;
set interactive_timeout = 57,350,142
方案二、
重启mysql进程
方案三、
如果在你的程序中正确关闭connections
但是这里有一点要注意要把关闭的语句写在finally中,
如果你写在try{}中出现异常的话是无法正确关闭的。

如下

} catch (SQLException e) {
} finally {
try {
if (stmt != null)
stmt.close();
if (dbConnection != null)
dbConnection.close();
} catch (SQLException e) {

}

最后一个是最实用的的,我亲身经历再加上度友们的建议
在这里插入图片描述
我之前虽然都关闭连接了,但是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{

关闭连接

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_37591637

请给我持续更新的动力~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值