致板橋:關於"查詢資料庫後是返回ResultSet還是返回Collection?"的幾點問題

experience發表於2003-03-28
看了板橋的"查詢資料庫後是返回ResultSet還是返回Collection?"有以下幾個問題?
1.關閉Collection後ResultSet的可訪問問題?
我的理解是:ResultSet自身並不持有資料, 它僅是在next()呼叫時從資料庫取當前遊標處的記錄, 因此當connection關閉後,ResultSet一定不能使用.你以前關閉Connection後仍能使用ResultSet是因為你可能使用了連線池, 這樣你呼叫Connection.close()時, 實際上系統沒有真正的關閉聯接,它只是被收回聯接池,物理的資料庫連線仍然存在, 故你之後能使用ResultSet.
這樣按你所示例的方式時就有很大的安全問題, 因為在你返回ResultSet時 , connection已經Close(),即connection交由連線池管理器管理, 在最壞的情況下, 如果連線池管理器管理關閉了你剛才釋放的Connection,ResultSet使用時就會發生問題.這種情況有很大的不確定性.
2.statement的浪費問題.
我們知道, 在使用JDBC時不僅Connection佔用資料庫資源,Statement也同樣佔用資料庫資源.
當用你用Statement返回ResultSet之後,為了確保ResultSet能夠在iterator中正常工作, 你肯定不能關閉Statement.因為當Statement關閉時, 會自動關閉它所建立的ResultSet.這一點不管是Statement還是PrepareStatement都遵循.(JDK document中可查到.)

相關文章