【问题标题】:Closing DB connection on finally in try catch在 try catch 中最终关闭数据库连接
【发布时间】:2017-04-28 01:22:05
【问题描述】:

如果我们在一个方法中打开一个数据库连接,并且我们想确保在出现异常的情况下关闭连接,我们可以将 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() 上抛出异常,大多数情况下连接会自动关闭吗?或者流会保持开放?

关于更多上下文,我正在将 Apache Phoenix 与 HBase 一起使用,并遇到了这个问题,因为我试图成为一个更安全的编码器,而不是意外地保持对 HBase 的流开放。

【问题讨论】:

    标签: java hadoop hbase try-catch


    【解决方案1】:

    close 引发的异常意味着有关连接关闭的某些事情不起作用。所以很可能并不是所有的东西都得到了正确的清理。但是,此时您可能无能为力。

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-22
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      相关资源
      最近更新 更多