最后在 try catch 中关闭数据库连接

Closing DB connection on finally in try catch

如果我们在一个方法中打开一个数据库连接,并且我们想确保在出现异常的情况下关闭连接,我们可以将connection.close()放在finally块中。我的问题是,如果关闭连接也能抛出异常怎么办?这段代码应该是什么样子?

try {
    conn.open();
    //Do stuff with database
} catch (Exception e) {
    e.printStackTrace();
} finally {
    conn.close(); //Can potentially throw exception.
}

我已经将 "throws Exception" 作为方法的一部分。示例:

public void doSomethingWithDB() throws Exception {
    //Method Body
}

如果conn.close()抛出异常,大多数情况下连接是自动关闭的吗?或者流会保持开放吗?

有关更多上下文,我正在将 Apache Phoenix 与 HBase 结合使用,并且运行进入这个问题,因为我正在努力成为一个更安全的编码员,而不是不小心保持对 HBase 的流开放。

close 引发的异常意味着有关连接关闭的某些操作无效。因此,很可能并非所有内容都已正确清理。但是,那时您可能无能为力。

通常的做法是使用一个 closeQuietly 辅助方法来尝试尽可能多地关闭并捕获任何异常(可能记录它们)。然后您的应用程序将继续运行,就像 close 工作一样。

请注意,这样的帮手甚至是必要的when you use a try-with-resources block