2015-05-18 13 views

Odpowiedz

9

Intencją obu metod jest inna:

W istocie, gdy używasz fetchOne() kwerendy musi zwracać 0 lub 1 rekord. Podczas korzystania z zapytania fetchAny() zapytanie może zwrócić dowolną liczbę rekordów, a jeśli któryś rekord zostanie zwrócony przez bazę danych, zwrócony zostanie pierwszy pobrany z zestawu wyników JDBC.

+0

Jakiekolwiek korzyści związane z wydajnością za pomocą funkcji fetchOne()? Czy mogę założyć, że przestaje ona znajdować rekord w tabeli, jeśli został już znaleziony? –

+1

@vinaypatlolla: jOOQ pobierze co najwyżej dwa rekordy z JDBC 'ResultSet' (Pierwszy jest zwracany, a drugi jest potrzebny do sprawdzenia, czy' fetchOne() 'musi wyrzucić' TooManyRowsException'). Powinieneś jednak upewnić się, że zarówno 1) twój sterownik JDBC nie buforuje zbyt wielu wierszy, 2) twoja baza danych faktycznie nie wczytuje wszystkich wierszy w kursorze. Najlepiej, jeśli użyjesz także klauzuli limit (1) jOOQ. –

+0

Dzięki @Lukas Eder. A przy okazji JOOQ jest niesamowity:) Używam go od 2 miesięcy i bardzo nam pomaga. –

2

The javadoc wyjaśnia różnicę. fetchAny() zwraca pierwszy rekord, natomiast fetchOne() oczekuje, że zapytanie zwróci zero lub jeden rekord, i zgłasza wyjątek, jeśli zapytanie zwróciło więcej niż jeden rekord.