[英]Closing DB connection on finally in try catch
如果我們要在某個方法中打開數據庫連接,並且要確保在發生異常的情況下關閉該連接,可以將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開放。
close
引發的異常意味着有關連接關閉的操作無效。 因此,有可能不是所有的東西都被正確清理了。 但是,此時您可能對此無能為力。
通常的做法是擁有一個closeQuietly
幫助程序方法,該方法嘗試盡可能地關閉並捕獲任何異常(可能記錄它們)。 然后,您的應用程序將繼續運行,就像close
工作正常一樣。
請注意, 當您使用try-with-resources塊時,甚至還需要這樣的幫助器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.