在connection上呼叫close方法會關閉statement和resultset嗎?
級聯的關閉這聽起來好像很有道理,而且在很多地方這樣做也是正確的,通常這樣寫
connection con = getconnection();//getconnection is your method
preparedstatement ps = con.preparestatement(sql);
resultset rs = ps.executequery();
……//
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)
}很麻煩是不是?但為了寫出健壯的程式,這些處理是必須的。
上面這東西講得真是精闢。
vencent chen 2006-03-15 23:15
關於JDBC中的ResultSet的更新資料操作
今天通過看api doc,才發現,還可以通過resultset來 更新資料 下面是api中的code fragment statement stmt con.createstatement resultset.type scroll insensitive,resultset.concur upda...
關於java中返回ResultSet結果集行數
st conn.createstatement int rowcount 0 resultset resultset st.executequery sql while resultset.next 此時返回的rowcount就是對應的結果集的總的行數。但是此時的resultset.next 已經執...
ResultSet 物件的指標
1.預設的 resultset 物件不可更新,僅有乙個向前移動的指標。因此,只能迭代它一次,並且只能按從第一行到最後一行的順序進行。可以生成可滾動和 或可更新的 resultset 物件。以下 片段 其中 con 為有效的 connection 物件 演示了如何生成可滾動且不受其他更新影響的 可更新...