米琪卡哇伊
当你用完你的Connection,您需要显式地关闭它,方法是调用它的close()方法以释放任何其他数据库资源(游标、句柄等)。实际上,Java中的安全模式是关闭ResultSet, Statement,和Connection(按该顺序)finally当你和他们在一起的时候阻止他们,就像这样: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);}实际上,ApacheCommonsDbUtils有一个DbUtils类,因此不需要编写自己的类。