jdbc关闭链接
我的MYSQL限制连接数为15.我发现我在程序里面关闭连接后,大多数连接进程并没真正关闭,而是处于休眠状态。后面再使用连接的时候,就会出现连接数过多的问题,求解。连接的关闭步骤都很正常!
补充:我用的时候是这样用的
try{
Util.excute(sql);
Util.excute(sql);
Util.excute(sql);
}catch{
}finally{
util.close();
}
追问:public static void close() {
try {
if (rs != null) {
rs.close();
}
if (cmd != null) {
cmd.close();
}
if (conn != null && conn.isClosed() == false) {
conn.close();
}
} catch (Exception e) {
System.out.println("连接关闭失败! " + e.getMessage());
}
}
这里是Util.close()方法。我关闭连接都是在finally模块关闭的。我做的是一个SWING界面的东西。根本就没有用多线程。难道SWING自动分线程处理各部分组件内容吗?而且我测试过。关闭连接那部分真没问题。public class Util {
public static Connection getConnection() throws Exception {
Class.forName(driver);
return DriverManager.getConnection(url, user, pwd);
}
public static int executeIUD(String sql) throws Exception {
conn = getConnection();
cmd = conn.prepareStatement(sql);
return cmd.executeUpdate();
}
}
象征贴点,用到的属性都是静态的。没有并发!我用NAVICAT监视器查看到。被我关闭的连接处于休眠状态大概1分钟左右就会自动关闭了。会不会是JDBC在关闭连接实现机制造成的?垃圾回收器没触发?我是程序运行出连接数过多异常查出来的。我先怀疑我的连接关闭不正确。反复检查了没问题。关闭方法也单独测试了。正常。但是在监视器里面就发现连接处于休眠状态!真心找不到问题出在哪里了受教了。我只是觉得这样用起来很方便。还没考虑到效率的问题!!我该考虑了你提的这个。把getConnection方法优化了下。Util没有执行close方法,即连接未关闭。就返回当前连接。也就不会重新建立连接了吧!谢谢提醒了。
PS:晕。这样改了反倒是读取不行了。难道ResultSet都已经提取了。Connection换了内容还不行吗?
答案:异常处理里也关闭了连接么?
其他:代码贴来看看 你好,你的应用是并发的吗?不是不并发连接数过多导致的。
上一个:我有一个JAVA程序,怎么用tomcat发布?
下一个:为什么一个正确的ext的demo放到项目中就不行了