JOOQ - разница между fetchAny и fetchOne

Существует ли (реальная) разница между fetchAny() и fetchOne()? Оба возвращают точную одну запись. Документация по API одинакова, но реализация (в github) отличается.

Ответ 1

Цель двух методов различна:

  • ResultQuery.fetchOne()

    Возвращает:

    Результирующая запись или ноль, если запрос не возвращает записей.

    Броски:

    TooManyRowsException - если запрос возвратил больше чем одну запись

  • ResultQuery.fetchAny()

    Возвращает:

    Первая результирующая запись или ноль, если запрос не возвращает записей.

По сути, когда вы используете fetchOne() запрос должен возвращать 0 или 1 запись. Когда вы используете fetchAny() запрос может вернуть любое количество записей, и, если база данных вернет какую-либо запись, будет возвращена первая, извлеченная из результирующего набора JDBC.

Обратите внимание на то, что fetchOne(), таким образом попытаться принести 2 записи из драйвера JDBC (решить, будет ли TooManyRowsException нужно быть выброшен), в то время как fetchAny() получает только самое большее 1 запись.

Ответ 2

javadoc объясняет разницу. fetchAny() возвращает первую запись, тогда как fetchOne() ожидает, что запрос вернет ноль или одну запись, и выдает исключение, если запрос возвратил более одной записи.