在 try catch 中最终关闭数据库连接
Posted
技术标签:
【中文标题】在 try catch 中最终关闭数据库连接【英文标题】:Closing DB connection on finally in 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 的流开放。
【问题讨论】:
【参考方案1】:从close
引发的异常意味着有关连接关闭的某些事情不起作用。所以很可能并不是所有的东西都得到了正确的清理。但是,此时您可能无能为力。
通常的做法是有一个closeQuietly
帮助方法,该方法尝试尽可能地关闭并捕获任何异常(可能记录它们)。然后,您的应用程序将继续运行,就像 close
工作一样。
请注意,这样的助手甚至是必要的when you use a try-with-resources block。
【讨论】:
以上是关于在 try catch 中最终关闭数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
Java 在try—catch块之后的finally是干啥的?
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表啥意