2013-11-03 63 views
0

我正在使用我在代碼中傳遞的javax.sql.rowset.CachedRowSet對象。該ResultSet從它被填充CachedRowSet傳遞給我的代碼的其餘部分之前被關閉(僅用於閱讀,我不更新或修改以任何方式):CachedRowSet :: release()與close()

public CachedRowSet getData(String query) throws SQLException { 
    RowSetFactory aFactory = RowSetProvider.newFactory(); 
    CachedRowSet crs = aFactory.createCachedRowSet(); 
    Statement stmt = null; 
    ResultSet rs = null; 
    try { 
     stmt = conn.createStatement(); 
     rs = stmt.executeQuery(query); 
     crs.populate(rs); 
    } finally { 
     DbUtils.closeQuietly(null, stmt, rs); 
    } 
    return crs; 
} 

鑑於上面的設置,當我完成它時,它也有意義嗎?close()release()CachedRowSet對象? This answer似乎暗示close()不會傷害,但不會解決release(),或兩者之間的差異。我想我可以做一個release()然後close()以防萬一,但我想了解更多一點。請注意,我甚至會將CachedRowSet對象序列化,然後將其從另一個模塊中的String內部化,因此我也可以在重新內化的實例上調用close()release(),這沒有任何意義。

回答

1

我不認爲我完全理解你的問題。但是..

realese() - >釋放此CachedRowSet對象的當前內容,並向所有註冊的偵聽器發送rowSetChanged事件。在調用此方法後,任何未完成的更新都將被丟棄,並且行集不包含任何行。沒有與底層數據源的交互,並且任何行集內容,元數據和內容更新都應該是不可恢復的。 鏈接:(http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html

接近() - >它繼承了從結果 發佈此ResultSet對象的數據庫和JDBC資源,而不是等待時,自動關閉這種情況發生。

ResultSet對象的關閉不會關閉由ResultSet創建的Blob,Clob或NClob對象。 Blob,Clob或NClob對象至少在創建它們的事務的持續時間內保持有效,除非它們的自由方法被調用。

當ResultSet關閉時,通過調用getMetaData方法創建的任何ResultSetMetaData實例仍可訪問。

注意: CachedRowSet不保持連接活着。它只是在執行查詢或更新時需要連接。

希望它有助於:)

相關問題