簡體   English   中英

最后在try catch中關閉數據庫連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM