2014年5月29日 星期四

工作日誌_java connection 的 conn.close() 與 null 差異

工作10年了,
其實也面對了不少事情,
為了怕以後忘記,還是寫起來吧,

未來帶開發團隊,一定要先要求 connection 關閉的標準寫好,
不然一堆 connection 卡在那裡佔用資源,server會受不了阿


在jdk的說明中有提到,幾個定義:
1.close() 的定義是"Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically released",依照說明可以知道,就是為了立刻釋放connection,避免佔用資料庫和 JDBC 的資源,可免於等 GC 機制啟動被動式的釋放資源

2.將connection置為null,就會變成這個 connection 還會持續佔用資源,等GC機制進行釋放,但是我們都知道GC的機制不是即時的,而且回收常會有不穩定和不確定性,因此這樣處理,還是會一直佔用資料庫和 JDBC 的資源

connection 關閉範例寫法

Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
    con = getConnection();//getConnection is your method
    ps = con.prepareStatement(sql);
    rs = ps.executeQuery();
    //...........
}
catch (SQLException ex) {
    //錯誤處理
}
finally{
    try {
        if(ps!=null)
            ps.close();
    }
    catch (SQLException ex) {
        //錯誤處理
    }
    try{
        if(con!=null)
            con.close();
    }
    catch (SQLException ex) {
        //錯誤處理
    }
}


沒有留言:

張貼留言