最后在 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。
如果我们在一个方法中打开一个数据库连接,并且我们想确保在出现异常的情况下关闭连接,我们可以将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。