2012-04-10 12 views
11

Ho un cursore restituito dal database eseguito in 31 ms (millisecondi).ResultSet - Cursore: rs.next() Prendendo molto tempo

Ma quando uso questo cursore avente più di 1500 righe per il recupero delle righe

ResultSet rs = (ResultSet)cstm.getObject(6); 

    while(rs.next()){ 
    system.out.println("..."); 
    } 

Appena semplice transversing attraverso ogni fila di cursore sta prendendo più di 40 secondi (40000 ms)

cosa può essere fatto?

risposta

16

Infatti, per default JDBC utilizzare un dimensioni di raccolta di 10. Quindi, se non si imposta su un valore maggiore, si chiama banca dati per i prossimi record esattamente 150 volte ...

Tutto quello che devi fare è quello di testare le prestazioni impostando FetchSize per .. 100 per esempio:

statement.setFetchSize(100); 

Si può giocare con questo numero per migliorare le prestazioni in base al vostro Environnement.

+0

Grazie ha funzionato .. Invece ho usato ResultSet.setFetchSize (100) ... – faraz

+0

Grande :) 100 dovrebbe essere buono sì – Mik378

+0

Grazie Mik378, hai reso la mia giornata ... !!! –

4

si dispone di più di 1500 righe nella tua cursore ei rs ciò che viene restituito dal database è solo un riferimento a tale cursore. Pertanto, quando invochi rs.next(), ogni volta che si accede al database cursr e ottieni il record corrente puntato dal puntatore del cursore.

Quindi ovviamente ci vorrà del tempo per andare al database ogni volta e recuperare un singolo record per più di 1500 volte con ogni iterazione del ciclo while.

+0

Bella spiegazione. – Deepak

Problemi correlati