据说使用后关闭所有JDBC资源是一个好习惯.但是如果我有下面的代码,有必要关闭Resultset和语句吗?

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) {};
}

问题是关闭连接是否起到了作用,或者是否留下了一些资源在使用.

推荐答案

你所做的是完美的,非常好的练习.

我之所以说这是很好的做法...例如,如果由于某种原因您正在使用"原始"类型的数据库池,并且您调用connection.close(),则连接将返回到池,ResultSet/Statement永远不会关闭,然后您将遇到许多不同的新问题!

所以你不能总是指望connection.close()来清理.

我希望这能有所帮助:)

Java相关问答推荐

Javascript更新alert 可扩展内容样式与CSS—按钮更多/更少

AlarmManager没有在正确的时间发送alert

@ IdClass with @ Inheritance(策略= InheritanceType. SINGLE_TABLE)

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

基本时态运算的ISO-8601周数据表示法

Java记录的不同序列化/反序列化

如何创建一个2d自上而下的移动系统,其中移动,同时持有两个关键是可能的处理?

JPanel透支重叠的JComcoBox

无法使用ApacheSpark依赖项构建JavaFX应用程序

测试何时使用Mockito强制转换对象会导致ClassCastException

把一条整型短裤和两条短裤装成一条长的

使用Room Database删除Jetpack合成中的所有项目后,UI未重新合成

如何在透视表中添加对计数列的筛选?

AbstractList保证溢出到其他方法

带有可选部分的Java DateTimeForMatter

使用for循环时出现堆栈溢出错误,但如果使用if块执行相同的操作,则不会产生错误

Android无法在Java代码中调用Kotlin代码,原因是在Companion中使用Kotlin枚举时

Cucumber java-maven-示例表-未定义一步

多线程、并发和睡眠未按预期工作

在数组中查找素数时出现逻辑错误