Newsgroup: it.comp.java
Titolo: Dimensione di un ResultSet ?Come ottenerla?

Salve!
Operando con i DataBase(per la prima volta!) mi serve sapere per un
ResulSet la sua dimensione in termini di righe. Ho visto che esiste un
metodo: ResulSet.getFetchSize() che credo faccia al caso mio, ma quando
lo applico ottengo sempre zero, ho provato a anche a chiamare prima un
next() ma niente.Allora attraverso un ciclo li conto io gli elementi,
il ciclo è il seguente:
int count = 0;
while(!rs.isLast()){  
  count++;  
  rs.next();
}
rs.first();
il quale funziona fin quando il resultset sul quale lo applico NON E'
vuoto. Infatti quando lo applico ad uno vuoto il ciclo è infinito!
Adesso come faccio a capire quando un resultset è vuoto o meno, ho
provato a confrontarlo con null, ma credo di aver commesso qualche
errore perchè non funziona!
Cosa devo fare?????
Grazie in anticipo!!!!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

sparo senza provare, quindi non garantisco :)
for (int i=0; rs.next(); i++) {
 System.out.println(i);
}
-- 
Davide Consonni
http://csvtosql.sourceforge.net

 Grazie in anticipo!!!!
int count = 0;
if (rs.first() == false) {
    // resultSet vuoto
}
else {
    count = rs.getFetchSize();
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 rs.first();
Prova cosě:
int count=0;
if (rs.last()) count=rs.getRow();
Ciao ciao

 rs.first();
questo con un resultset /normale/ non lo puoi fare.
Dalla documentazione di ResultSet:
A default ResultSet object is not updatable and has a cursor that moves 
forward only. Thus, you can iterate through it _only_ _once_ and only 
from the first row to the last row.
Per creare un result set che possa essere navigabile devi usare il 
parametro ResultSet.TYPE_SCROLL_INSENSITIVE quando crei lo statement che 
andrà ad aprire il result set.
getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Ovviamente la gestione di un oggetto simile sarà molto più onerosa in 
termini di risorse.
ciao
-- 
mauro

 ResulSet la sua dimensione in termini di righe. Ho visto che esiste un
Visto anche il resto dei messaggi, domanda: ti serve  proprio sapere 
prima il numero di righe? Di solito si cerca di far in modo di usare
while(rs.next()). Per avere il numero di righe o scorri due volte il 
result set (per quelli base  o comunque devi usare un tipo di result set 
che richiede maggiori risorse per la sua gestione. Un ipotesi 
alternativa potrebbe anche essere fare un select count(*) con le stesse 
condizioni where e far fare il lavoro al DB; naturalmente questo vale 
solo se fra le due select nessun altro processo cambia i dati!
bye
DKano

 prima il numero di righe?
Personalmente parlando, posso affermare che in molti casi torna comodo
sapere quanti record ritorna il ResultSet. Se per esempio il contenuto del
ResultSet viene utilizzato per popolare degli array, bisogna prima sapere
il numero di record del ResultSet in maniera da dimensionare correttamente
gli array
Henryx

Henryx wrote:

Ti conviene comunque popolare un'implementazione di List (ArrayList o 
Vector) e ottenere l'array dal metodo toArray(). in questa maniera non 
hai bisogno di sapere a priori la dimensione del result set.
Io non ho mai trovato utile sapere prima la dimensione di un result set, 
l'unico caso che si può avvicinare è quando ho sviluppato un servizio di 
paginazione con scelta della pagina, first pg, last pg, ecc. ma quel 
caso è differente infatti il totale dei record non sono in realtà i 
record visualizzati ed infatti l'ho risolto facendo un select count(*) 
con le stesse condizioni di where come ti ha suggerito DKano.
ciao
-- 
mauro

 Io non ho mai trovato utile sapere prima la dimensione di un result set,
gia' e considera anche che a priori potresti anche scorrerti un miliardo di
record, magari enormi
e' vivamente sconsigliato da qualsiasi stile di accesso a DB una cosa del
genere
ciao N
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
scusa ma quando fai una query di solito sai indicativamente quanti 
record ti possono saltare fuori; come fai ad ottimizzare un piano di 
accesso se non sai se ti escono 100 record o 1 milione??
vorrei proprio vedere quanti giorni ci può mettere il tuo result set 
SCROLLABLE a fare un last() ed un first() di seguito su un miliardo di 
record!!
ripeto che in questi casi l'unica soluzione è eseguire un count(*), 
invece non lo ritengo necessario per sapere se la mia query ha estratto 
più o meno di 50 record!
ripeto, a me non è mai stato utile, non ho detto che non può essere 
utile. non sono un tecnico della tim che deve estrarre tutte le 
telefonate fatte in un anno, forse in quel caso adotterei altre 
soluzioni. per lavorare su result set di piccole dimensioni non ho mai 
trovato controindicazioni con questo approccio.
ciao
-- 
mauro

 hai bisogno di sapere a priori la dimensione del result set.
Teoricamente con un Vector risolverei, ma il problema mi si riproporrebbe
nel momento in cui devo estrarre n colonne per x righe, caso molto
frequente quando devi popolare una JTable od una tabella HTML (ArrayList
non l'ho mai utilizzato, e quindi non saprei dire se puo` risolvermi il
problema)
Henryx

 trovato controindicazioni con questo approccio.
Se non hai mai sentito parlare della comunicazione imperfetta e' una teoria
che dice che qualsiasi cosa vuoi comunicare ad un'altra persona e in
qualsiasi modo tu la dici non riuscirai a comunicare il tuo pensioro
un resultset SCROLLABLE chiunque vuole fare buon SW potrebbe non usarlo
Esiste una teoria dei dataBase, un po' provocatoria, ma neanche tanto che
dice che si potrebbe fare buon software chiedendo ai Database solo recordset
di 1 solo record
ciao Nicola


 recordset di 1 solo record
Personalmente non concordo con questa teoria, in quanto ti costringerebbe ad
aprire n resultset alla volta (a meno che non vi sia un metodo piu`
elegante ed infallibile per popolare una JTable con i dati di un
determinato giorno)
Henryx