使用连接完成后,您需要通过调用其close()方法显式关闭它,以释放连接可能持有的任何其他数据库资源(游标,句柄等)。
实际上,Java中的安全模式是在完成它们后,在finally块中关闭ResultSet,Statement和Connection(按此顺序),如下所示:
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 */}
}
}
finally块可以稍微改进(避免空检):
} finally {
try { rs.close(); } catch (Exception e) { /* ignored */ }
try { ps.close(); } catch (Exception e) { /* ignored */ }
try { conn.close(); } catch (Exception e) { /* ignored */ }
}
但是,这仍然是非常冗长,所以你通常最终使用一个帮助类关闭对象在安全的安全助手方法和finally块成为这样:
} finally {
DbUtils.closeQuietly(rs);
DbUtils.closeQuietly(ps);
DbUtils.closeQuietly(conn);
}