在try catch中关闭数据库连接

ws51t4hk  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(533)

如果要在方法中打开数据库连接,并且要确保在出现异常时关闭连接,则可以将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。

enyaitl3

enyaitl31#

引发的异常 close 意味着有关连接关闭的某些内容不起作用。所以很可能不是所有的东西都被清理干净了。然而,在那一点上你可能没有什么办法。
通常的做法是 closeQuietly 尝试尽可能多地关闭并捕获任何异常(可能记录它们)的helper方法。您的应用程序将继续运行,就像 close 工作。
请注意,当您使用try with resources块时,甚至需要这样的助手。

相关问题