2012-04-26 12 views
6

Chciałbym napisać funkcję java, która pobiera zapytanie SQL i zwraca ResultSet do przetwarzania w innym miejscu. Nie można tego zrobić, gdy ResultSet nie działa, gdy połączenie zostanie zamknięte.CachedRowSet: czy nadal może być używany do przechowywania danych ResultSet?

Googling I znalazłem VERY OLD (2004) OReilly article, który miał coś, co wyglądało jak lekarstwo: CachedRowSet. Po prostu wstawiasz ResultSet, CachedRowSet zapisuje dane, pozwala zamknąć połączenie i odtwarzać dane w innym miejscu przy użyciu zwróconego CachedRowSet.

Artykuł odwołuje się do implementacji CachedRowSet firmy Sun, które wydają się być nigdzie nie można znaleźć.

Nowoczesne javadocs (dla Java 1.5 i nowsze) wydają się mieć coś o tej samej nazwie, "CachedRowSet", która jest czymś więcej niż tylko posiadaczem danych ResultSet. Wydaje się, że "CachedRowSet" przetwarza całą bazę danych od uzyskania połączeń i wszystkiego innego.

Czy to "CachedRowSet" to samo, o czym jest mowa w starym artykule?

Chciałbym coś prostego, jak w starym artykule. Coś, do czego zostanie załadowany zestaw wyników do przetworzenia po zamknięciu połączenia.

Czy istnieje takie zwierzę?

Dzięki

Odpowiedz

-1

javax.sql.rowset.CachedRowSet jest jedynie interfejs. Istnieje własna implementacja Sun/Oracle, ale nie jest obsługiwana, a zatem ryzykowna w użyciu.

Większość kodów w tych dniach jest zgodna z modelem "zamień na obraz".

+0

MBFG; Używam Oracle i miałem nadzieję, że wykorzystam to jako tymczasową miarę, a ja wyczyszczę starsze kody i nauczę się lepszego sposobu wykonywania operacji na danych (frameworków baz danych itp.). Nie byłem w stanie znaleźć niczego o tym, gdzie go zdobyć, jak go użyć. Jakieś wskazówki, które wykraczają poza zakres Googling? – Steve

+0

W jaki sposób użycie zwrotów zastąpić "ResultSet", aby przewinąć poza funkcję, w której został uzyskany? – Steve

+1

Co powoduje, że 'com.sun.rowset.CachedRowSetImpl' jest nieobsługiwany? Interfejs [CachedRowSet] (http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html) znajduje się w Javie 7, a jego javadoc stwierdza, że ​​"implementacja referencyjna interfejsu CachedRowSet dostarczonego przez Oracle Corporation jest standardową implementacją." Programiści mogą używać tej implementacji tak, jak jest ". Implementacja referencyjna to 'com.sun.rowset.CachedRowSetImpl'; to nie brzmi dla mnie bezobsługowo. –

-1

Jeśli chcesz tylko przesłać dane bez potrzeby korzystania z wszystkich funkcji dostępnych w CachedRowSet, lepiej jest po prostu umieścić dane zestawu wyników na liście list.

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(); 

Po zakończeniu można wysłać obiekt listy w dowolne miejsce, a następnie wykonać iterację, aby uzyskać dane.

4

to standardowy interfejs Java. Sun napisał implementację referencyjną i Sun/Oracle JDK contains it. Jeśli używasz innego JDK, ta lub inna implementacja może być lub może być niedostępna.

Jeśli masz już ResultSet, możesz wypełnić z niego CachedRowSet, używając metody populate.

Jeśli myślisz wystarczająco daleko, aby używać Java 7, możesz uzyskać instancję CachedRowSet w sposób przenośny, używając metody RowSetFactory, która ma metodę createCachedRowSet. Możesz uzyskać RowSetFactory od RowSetProvider (oczywiście!).

Powiązane problemy