【发布时间】:2012-06-17 19:47:51
【问题描述】:
我正在通过远程连接在 mssql server 2008 数据库上执行一些 crud。我在 Java 中有业务逻辑,在 finally 块中包含用于连接、语句和结果集 close() 的紧密代码。
我的疑问是,即使我完成工作,连接端口仍然打开,关闭所有连接大约需要 20 分钟。我可以使用 netstat -a 命令查看打开的连接。
我需要快速关闭连接,因为每个操作都会多次打开/关闭连接。因此,我看到大量连接打开。长时间保持业务逻辑已经关闭的如此多不需要的连接是非常不安全和昂贵的。
我正在使用最新的 jtds.jar 文件。任何提示或建议将不胜感激。
谢谢,
阿克谢
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// Do stuff
...
} catch (SQLException ex) {
// Exception handling stuff
...
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) { /* ignored */}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) { /* ignored */}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) { /* ignored */}
}
}
【问题讨论】:
-
贴出数据库操作代码。代码会帮助你而不是几句话。
-
正如我上面所说的,它与代码无关。我看到连接 conn、stmt 和结果集在调试模式下明显关闭。要么是很少见的垃圾收集器问题,因为它需要 10-20 分钟。可能是一些数据库系统设置问题。
-
你使用netstat -a看到的连接,是否处于WAIT_TIME状态?
-
数据库无法控制应用程序创建的连接。好吧,它可以关闭现有的连接,但如果应用程序想要关闭它,它就不能实时连接。
-
@Santosh 是的,有些处于“wait_time”状态,有些处于“已建立”状态。与 wait_time 的连接需要更长的时间才能终止。(可能是因为他们正在等待池中的连接?)
标签: java database sql-server-2008 connection database-connection