Oracle
 sql >> Database >  >> RDS >> Oracle

Cosa e quando dovrei specificare setFetchSize()?

Dovresti leggere questa pagina dai documenti ufficiali su set di risultati . Dice

Per impostazione predefinita, i ResultSet vengono completamente recuperati e archiviati in memoria. Nella maggior parte dei casi questo è il modo più efficiente di operare e, grazie alla progettazione del protocollo di rete MySQL, è più facile da implementare. Se stai lavorando con ResultSet che hanno un numero elevato di righe o valori di grandi dimensioni e non puoi allocare spazio di heap nella tua JVM per la memoria richiesta, puoi dire al driver di eseguire lo streaming dei risultati una riga alla volta.

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
                            java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

La combinazione di un set di risultati di sola lettura e di sola lettura, con una dimensione di recupero di Integer.MIN_VALUE funge da segnale al driver per eseguire lo streaming di set di risultati riga per riga. Dopodiché, tutti i set di risultati creati con l'istruzione verranno recuperati riga per riga.

In effetti, l'impostazione di solo fetchSize non ha alcun effetto sull'implementazione di connector-j.