關於ResultSet的關閉問題

2021-08-29 03:37:58 字數 1095 閱讀 8102

在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 物件 演示了如何生成可滾動且不受其他更新影響的 可更新...