虽然Connection之后关闭,但必须单独关闭JDBC结果集和语句吗?
据说在使用后关闭所有JDBC资源是一个好习惯。但是,如果我有以下代码,是否有必要关闭Resultset和Statement?
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = // Retrieve connection
stmt = conn.prepareStatement(// Some SQL);
rs = stmt.executeQuery();
} catch(Exception e) {
// Error Handling
} finally {
try { if (rs != null) rs.close(); } catch (Exception e) {};
try { if (stmt != null) stmt.close(); } catch (Exception e) {};
try { if (conn != null) conn.close(); } catch (Exception e) {};
}
问题是连接的关闭是否完成了工作,或者是否使用了一些资源。
没有找到相关结果
已邀请:
8 个回复
镰茧钩
,连接将被返回到池中并且
/
将永远不会被关闭然后你会遇到很多不同的新问题! 所以你不能总是依靠
来清理。 我希望这有帮助 :)
篮肥炼皖
这种语法非常简洁和优雅。即使无法创建
,
也会被关闭。
补蹲农界维
物体关闭时,它 当前
对象,如果一个 存在,也是关闭的。 然而,当你关闭底层
时,j3ѭ和
是否关闭时,javadocs并不十分清楚。他们只是声明关闭一个连接: 发布此
对象 数据库和JDBC资源 马上而不是等待 它们会被自动释放。 在我看来,当你完成它们时,总是明确地关闭
,
和
,因为
的实现可能因数据库驱动程序而异。 您可以使用Apache的DBUtils中的
等方法为自己节省大量的样板代码。
告耸
和
,因为Oracle在关闭连接之前保持游标保持打开存在问题。如果不关闭
(光标),则会抛出超出最大打开游标的错误。 我想您可能会遇到与您使用的其他数据库相同的问题。 完成后,这是教程Close ResultSet: 完成后关闭ResultSet 完成后立即关闭
对象 甚至与
对象一起工作 虽然
对象关闭了
隐含的对象 关闭,明确关闭
给垃圾收集器机会 尽早回忆记忆 因为
对象可能占用 大量内存取决于查询。
容淑阔九
蜗仓馈
辟官陡板休
理论上它不是100%完美,因为在检查关闭状态和关闭本身之间,状态的变化有一点空间。在最坏的情况下,你会得到一个警告。 - 但它比长期查询中状态更改的可能性要小。我们在生产中使用这种模式带有“avarage”负载(150同时用户),我们没有遇到任何问题 - 所以永远不要看到那个警告信息。
瓜唱鬼
将关闭连接创建的任何
s。关闭任何
将关闭由该created3ѭ创建的所有
。如果
是否可以使用无关紧要。即使是poolable连接也必须在返回游泳池之前进行清洁。 当然,你可能在
上有很长的嵌套循环来创建大量的语句,然后关闭它们是合适的。我几乎从未关闭
但是,当关闭
或
时它似乎会过度关闭它们。