2017-05-04 54 views
2

我建立了一個數據庫連接。然後我嘗試進行連接並在有異常時返回。更進一步,在代碼中我有一個Finally塊,我打算用它作爲catch來關閉連接。最後處理空連接

Connection con = null; 
try{ 
    try{ 
    con = connectDB(); 
    } 
    catch{ 
    return; 
    } 
    ...code 
catch{ 
    return; 
} 
finally{ 
    con.close(); 
} 

但是,如果初始連接失敗,它將跳轉到Finally塊,我的con.close()拋出一個空指針異常。解決這個問題的最佳方法是什麼?有沒有辦法測試con是否爲null?我試過如果(con.isValid(0))和con.equals(null)和con == null,它們都不起作用。

回答

1

Connection implements AutoClosable因此您可以使用try-with-resources聲明。

try (Connection con = connectDB()) { 
    [some code] 
} 
0
if (con.isValid(0)) 

不能工作,如果connull。你會調用一個空變量的成員,導致NullPointerException

這同樣適用於

con.equals(null) 

現在,

if (con == null) 

的工作,但你要負比較:

if (con != null) 

代替。

0

您可以使用con != nullObjects.nonNull(con)關閉它裏面finally塊之前,檢查連接對象不是null如下圖所示:

Connection con = null; 
try{ 
    con = connectDB(); 
    //add your code 
    catch{ 
     //log exception 
     return; 
    } finally { 
    if(Objects.nonNull(con)) { //or use con != null 
     con.close(); 
    } 
} 

要不然你也可以使用try-與資源(因爲Connection如下所示:

try(Connection con = connectDB()) { 
    //code 
catch { 
    return; 
}