如果我们在方法中打开数据库连接,并且我们想确保在异常的情况下关闭连接,我们可以将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开放。
答案 0 :(得分:0)
从close
引发的异常意味着关于连接关闭的某些操作无效。所以很可能并非一切都得到了妥善清理。但是,那时你可能没什么可做的。
通常的做法是使用closeQuietly
辅助方法尽可能地关闭并捕获任何异常(可能记录它们)。然后你的应用程序就会开始工作,就好像close
一样。
请注意,甚至需要这样的帮助when you use a try-with-resources block。