2015-05-18 13 views

risposta

9

L'intento dei due metodi è diverso:

In sostanza, quando si utilizza fetchOne() la query deve restituire 0 o 1 record. Quando si utilizza fetchAny(), la query può restituire qualsiasi numero di record e se qualsiasi record viene restituito dal database, verrà restituito il primo record recuperato dal set di risultati JDBC.

+0

Qualsiasi vantaggio di prestazioni utilizzando fetchOne()? Posso supporre che smetta di trovare il record in tutta la tabella se lo ha già trovato? –

+1

@vinaypatlolla: jOOQ recupera al massimo due record dal 'ResultSet' JDBC (il primo viene restituito e il secondo è necessario per verificare se' fetchOne() 'ha bisogno di gettare' TooManyRowsException'). Dovresti comunque assicurarti che entrambi 1) il tuo driver JDBC non memorizzi troppe righe, 2) il tuo database non carichi effettivamente tutte le righe nel cursore. Idealmente, userete anche la clausola 'limite (1)' di jOOQ. –

+0

Grazie a @Lukas Eder. E dal modo in cui JOOQ è stupendo:) Lo uso da 2 mesi e ci sta aiutando molto. –

2

The javadoc spiega la differenza. fetchAny() restituisce il primo record, mentre fetchOne() si aspetta che la query restituisca zero o un record e genera un'eccezione se la query ha restituito più di un record.