如果要在方法中打开数据库连接,并且要确保在出现异常时关闭连接,则可以将connection.close()放在finally块中。我的问题是,如果关闭连接也会引发异常呢?这个代码应该是什么样子?
try {
conn.open();
//Do stuff with database
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close(); //Can potentially throw exception.
}
我已经将“抛出异常”作为方法的一部分。例子:
public void doSomethingWithDB() throws Exception {
//Method Body
}
如果在conn.close()上引发异常,在大多数情况下连接是否自动关闭?或者河流会继续开放吗?
在更多的上下文中,我将apachephoenix与hbase一起使用,并遇到了这个问题,因为我正在尝试成为一个更安全的编码者,而不是意外地将流开放给hbase。
1条答案
按热度按时间enyaitl31#
引发的异常
close
意味着有关连接关闭的某些内容不起作用。所以很可能不是所有的东西都被清理干净了。然而,在那一点上你可能没有什么办法。通常的做法是
closeQuietly
尝试尽可能多地关闭并捕获任何异常(可能记录它们)的helper方法。您的应用程序将继续运行,就像close
工作。请注意,当您使用try with resources块时,甚至需要这样的助手。