13 ottobre 2008

Ottenere il numero di righe recuperate da un ResultSet

Una domanda che prima o poi uno sviluppatore Java si pone è : come posso recuperare il numero di risultati di una query da un java.sql.ResultSet.
La risposta potrebbe sembrare non banale, ma lo è in quanto di default i ResultSet vengono istanziati in maniera sequenziale, ma ciò può essere modificato mediante un opportuna dichiarazione, con cui è possibile accedere ai dati in maniera non sequenzioale. E' possibile infatti muoversi anche in senso opposto, oppure accedere direttamente ad una riga.

Vediamo un esempio di codice:
PreparedStatement pstmt4 = medpConnection.prepareStatement(
"SELECT * FROM USERS",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);

Vediamo ora come si può recuperare il numero di righe ottenute come risultato dalla query:
ResultSet rs4 =  pstmt4.executeQuery();
rs4.last();
int numberList = rs4.getRow();
rs4.beforeFirst();

In questo modo si posiziona il ResultSet in ultima riga ottenuta, si recupera il numero della riga e si riposiziona il ResultSet nella posizione iniziale, cioè prima del primo risultato.
In tal modo è possibile utilizzare il ResultSet in un semplicissimo ciclo del tipo:

while (rs4.next()) {
...
}

1 commento:

Luca ha detto...

Ottimo!