Esiste una differenza (reale) tra fetchAny()
e fetchOne()
? Entrambi restituiscono un record esatto. La documentazione dell'API è la stessa, ma l'implementazione (su github) è diversa.jOOQ - differenza tra fetchAny e fetchOne
risposta
L'intento dei due metodi è diverso:
-
Returns:
Il record risultante oppure null se la query non restituisce alcun record.
Produce:
TooManyRowsException
- se la query ha restituito più di un record -
Returns:
I primi res record ulting o null se la query non restituisce alcun record.
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.
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.
Qualsiasi vantaggio di prestazioni utilizzando fetchOne()? Posso supporre che smetta di trovare il record in tutta la tabella se lo ha già trovato? –
@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. –
Grazie a @Lukas Eder. E dal modo in cui JOOQ è stupendo:) Lo uso da 2 mesi e ci sta aiutando molto. –