在Java中做到真正安全的釋放資料庫資源

2021-04-17 02:07:45 字數 1068 閱讀 7995

在connection上呼叫close方法會關閉statement和resultset嗎?

級聯的關閉這聽起來好像很有道理,而且在很多地方這樣做也是正確的,通常這樣寫

connection con = getconnection();//getconnection is your method

preparedstatement ps = con.preparestatement(sql);

resultset rs = ps.executequery();

……///rs.close();

///ps.close();

con.close();  // no!

這樣做的問題在於connection是個介面,它的close實現可能是多種多樣的。在普通情況下,你用drivermanager.getconnection()得到乙個connection例項,呼叫它的close方法會關閉statement和resultset。但是在很多時候,你需要使用資料庫連線池,在連線池中的得到的connection上呼叫close方法的時候,connection可能並沒有被釋放,而是回到了連線池中。它以後可能被其它**取出來用。如果沒有釋放statement和resultset,那麼在connection上沒有關閉的statement和resultset可能會越來越多,那麼……

相反,我看到過這樣的說法,有人把connection關閉了,卻繼續使用resultset,認為這樣是可以的,引發了激烈的討論,到底是怎麼回事就不用我多說了吧。

所以我們必須很小心的釋放資料庫資源,下面的**片斷展示了這個過程

connection con = null;

preparedstatement ps = null;

resultset rs = null;

try

catch (sqlexception ex)

finally

catch (sqlexception ex)

trycatch (sqlexception ex)

}很麻煩是不是?但為了寫出健壯的程式,這些處理是必須的。

Java中的執行緒安全

執行緒安全問題之所以存在,本質原因是 當多個執行緒訪問同乙個資料的時候,可能引起衝突。而且這些執行緒中至少有乙個執行緒會改寫這個資料時才會出現衝突,如果所有執行緒都唯讀不改寫,則不會衝突。由於這個資料不只被乙個執行緒訪問,我們稱這個資料為共享資料。類中一般會出現三種資料 靜態成員變數 普通成員變數 ...

js在IE中的記憶體釋放問題

在ie下的js程式設計中,以下的程式設計方式都會造成即使關閉ie也無法釋放記憶體的問題,下面分類給出 1 給dom物件新增的屬性是乙個物件的引用。範例 var myobject document.getelementbyid mydiv myprop myobject 解決方法 在window.on...

This在java中的運用

1 當有成員變數和區域性變數重名時。用this來表示成員變數。public class thisdemo public static void main string args 2 返回類自身的引用 public class thiszisheng private void print public...