2012-04-26 7 views
6

Vorrei scrivere una funzione java che accetta una query SQL e restituisce un ResultSet per l'elaborazione altrove. Questo non può essere fatto come un ResultSet è morto una volta che la connessione è stata chiusa.CachedRowSet: può ancora essere utilizzato per contenere i dati ResultSet?

Googling around Ho trovato uno VERY OLD (2004) OReilly article che aveva qualcosa che sembrava la cura: CachedRowSet. Basta rilasciare il ResultSet, il CachedRowSet salva i dati, consente di chiudere la connessione e giocare con i dati altrove utilizzando il CachedRowSet restituito.

L'articolo fa riferimento a implementazioni di CachedRowSet da parte di Sun, che sembrano essere in nessun posto da trovare.

I javadoc moderni (per Java 1.5 e versioni successive) sembrano avere qualcosa con lo stesso nome, "CachedRowSet", che è più di un semplice titolare di dati ResultSet. Quel "CachedRowSet" sembra eseguire l'intera elaborazione del database dall'ottenere connessioni e tutto il resto.

È "CachedRowSet" la stessa cosa di cui si parla nel vecchio articolo?

Vorrei qualcosa di semplice, come nel vecchio articolo. Qualcosa per ritagliare un ResultSet in per l'elaborazione dopo la chiusura del conneciton.

Esiste un animale simile?

Grazie

risposta

-1

javax.sql.rowset.CachedRowSet è semplicemente un'interfaccia. Esiste un'implementazione proprietaria Sun/Oracle, ma non è supportata e quindi rischiosa da usare.

La maggior parte del codice in questi giorni segue il modello "convert to pojos".

+0

MBFG; Sto usando Oracle e speravo di usarlo come misura temporanea mentre pulivo un po 'di codice legacy e apprendo un modo migliore di fare le cose in modo dati (framework di database, ecc.). Non ero in grado di trovare nulla su dove trovarlo, come usarlo. Eventuali indizi oltre Googling? – Steve

+0

In che modo l'utilizzo di pojos sostituisce l'ottenimento di un "ResultSet" per scorrere al di fuori della funzione in cui è stato ottenuto? – Steve

+1

Cosa ti fa pensare che "com.sun.rowset.CachedRowSetImpl' non sia supportato? L'interfaccia [CachedRowSet] (http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/CachedRowSet.html) è in Java 7 e la sua javadoc afferma che "l'implementazione di riferimento dell'interfaccia CachedRowSet fornita da Oracle Corporation è un'implementazione standard: gli sviluppatori possono utilizzare questa implementazione così come è". L'implementazione di riferimento è 'com.sun.rowset.CachedRowSetImpl'; questo non sembra non supportato da me. –

-1

Se si desidera trasferire i dati senza la necessità di tutte le funzioni fornite da CachedRowSet, è meglio inserire i dati del set di risultati in un elenco di elenchi.

Al termine è possibile inviare l'oggetto elenco ovunque si desidera e quindi scorrere attraverso di esso per ottenere i dati.

4

CachedRowSet è un'interfaccia Java standard. Sun ha scritto un'implementazione di riferimento e lo Sun/Oracle JDK contains it. Se stai utilizzando un JDK diverso, quello o un'altra implementazione potrebbe o meno essere disponibile.

Se si dispone già di ResultSet, è possibile compilare uno CachedRowSet utilizzando il metodo populate.

Se state lungimiranti abbastanza per essere utilizzando Java 7, allora si può ottenere un'istanza CachedRowSet in modo portatile, utilizzando un RowSetFactory, che ha un metodo createCachedRowSet. È possibile ottenere un RowSetFactory da un RowSetProvider (ovviamente!).