2012-04-26 61 views
6

我想寫一個java函數,它接受一個SQL查詢並返回一個ResultSet在其他地方處理。這是無法完成的,因爲一旦連接關閉,ResultSet就會死亡。CachedRowSet:它仍然可以用來保存ResultSet數據嗎?

谷歌搜索我發現一個VERY OLD (2004) OReilly article有東西看起來像治癒:CachedRowSet。您只需放入ResultSet,CachedRowSet保存數據,讓您關閉連接並使用返回的CachedRowSet在別處播放數據。

本文引用了Sun提供的CachedRowSet的實現,它似乎無處可尋。

現代javadocs(用於Java 1.5及更高版本)似乎有一些同名的「CachedRowSet」,它不僅僅是ResultSet數據的持有者。這個「CachedRowSet」似乎是通過獲取連接和其他一切來完成整個數據庫處理。

這就是「CachedRowSet」與舊文章中討論過的相同嗎?

我想要簡單的東西,就像在老文章中一樣。在連接關閉後將某個ResultSet放入進行處理。

有沒有這樣的動物?

由於

回答

-1

javax.sql.rowset.CachedRowSet僅僅是一個接口。有一個Sun/Oracle專有實施,但它不受支持,因此使用風險很大。

這幾天的大部分代碼都遵循「convert to pojos」模型。

+0

MBFG;我使用的是Oracle,我希望將此作爲臨時措施,同時清理一些遺留代碼並學習更好的數據處理方式(數據庫框架等)。我無法找到關於從哪裏得到它的方法,以及如何使用它。任何超出谷歌搜索的線索? – Steve 2012-04-27 00:01:17

+0

如何使用pojos替換獲取「ResultSet」以滾動獲取它的函數的外部? – Steve 2012-04-27 00:02:19

+1

是什麼讓你認爲'com.sun.rowset.CachedRowSetImpl'不受支持? [CachedRowSet接口](http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet。html)在Java 7中,它的javadoc聲明「Oracle公司提供的CachedRowSet接口的參考實現是一個標準實現,開發人員可以使用這個實現」。參考實現是'com.sun.rowset.CachedRowSetImpl';這聽起來並不支持我。 – 2012-06-22 16:27:12

-1

如果您只是想傳輸數據而不需要CachedRowSet提供的所有功能,那麼最好將結果集數據放入列表清單中。

List<Object> list = new ArrayList<Object>(); 
    ResultSet rs = stmt.executeQuery("select * from myTable"); 
    while(rs.next()) { 
     List<Object> row = new ArrayList<Object>(); 
     row.add(rs.getObject(1)); 
     row.add(rs.getObject(2)); 
     row.add(rs.getObject(3)); 
     //And so on, or you can use the ResultSetMetaData to determine the number of columns 
     list.add(row); 
    } 
    rs.close(); 

當你完成後,你可以發送該列表對象,你想要的任何地方,然後遍歷它來獲取數據。

4

CachedRowSet是一個標準的Java接口。 Sun寫了一個參考實現,和Sun/Oracle JDK contains it。如果您使用的是不同的JDK,則該實現或其他實現可能可用,也可能不可用。

如果您已有ResultSet,則可以使用populate方法從中填寫CachedRowSet

如果您有足夠的前瞻性思考使用Java 7,那麼您可以使用具有createCachedRowSet方法的RowSetFactory以便攜方式獲得CachedRowSet實例。你可以從RowSetProvider獲得RowSetFactory(當然!)。

相關問題