2015-05-18 11 views

Antwort

9

Die Absicht der beiden Methoden ist anders:

  • ResultQuery.fetchOne()

    Returns:

    Der resultierende Datensatz oder null, wenn die Abfrage keine Datensätze zurückgibt.

    Würfe:

    TooManyRowsException - wenn die Abfrage mehr als einen Datensatz

  • ResultQuery.fetchAny()

    Rückgabe zurückgegeben:

    Die ersten res ulting record oder null, wenn die Abfrage keine Datensätze zurückgibt.

Im Wesentlichen, wenn Sie fetchOne() die Abfrage verwenden muss 0 oder 1 Datensatz zurück. Wenn Sie fetchAny() verwenden, kann die Abfrage eine beliebige Anzahl von Datensätzen zurückgeben. Wenn ein Datensatz von der Datenbank zurückgegeben wird, wird der erste Datensatz aus der JDBC-Ergebnismenge zurückgegeben.

+0

Irgendwelche Leistungsvorteile durch die Verwendung von fetchOne()? Kann ich davon ausgehen, dass es den Datensatz in der Tabelle nicht mehr findet, wenn er bereits gefunden wurde? –

+1

@vinaypatlolla: jOOQ holt höchstens zwei Datensätze aus dem JDBC 'ResultSet' (Der erste wird zurückgegeben, und der zweite wird benötigt, um zu überprüfen, ob 'fetchOne()' 'TooManyRowsException' werfen muss). Sie sollten jedoch weiterhin sicherstellen, dass sowohl 1) Ihr JDBC-Treiber nicht zu viele Zeilen zwischenspeichert, 2) Ihre Datenbank nicht wirklich alle Zeilen im Cursor lädt. Im Idealfall verwenden Sie auch die 'limit (1)' -Klausel von jOOQ. –

+0

Danke @Lukas Eder. Und übrigens JOOQ ist fantastisch :) Ich benutze es seit 2 Monaten und helfe uns sehr. –

2

The javadoc erklärt den Unterschied. fetchAny() gibt den ersten Datensatz zurück, während fetchOne() erwartet, dass die Abfrage null oder einen Datensatz zurückgibt, und eine Ausnahme auslöst, wenn die Abfrage mehr als einen Datensatz zurückgibt.