当前位置:编程学习 > JAVA >>

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换了内容还不行吗?
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,