Как написать количество запросов в JOOQ

Я конвертирую чистый SQL в JOOQ теперь у меня есть это

("SELECT Count(*) Count From Table "); 

Я должен написать это в JOOQ, как мы можем написать это?

selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);

3 ответа

Решение

Самый простой способ реализовать то, что вы запрашиваете, это с помощью selectCount():

int count = 
DSL.using(configuration)
   .selectCount()
   .from(Table)
   .fetchOne(0, int.class);

Кроме того, вы можете явно выразить count() функция:

int count = 
DSL.using(configuration)
   .select(DSL.count())
   .from(Table)
   .fetchOne(0, int.class);

Есть другая альтернатива для получения count(*) любого произвольного select выражение, которое поможет вам избежать указания индекса столбца результата и введите выше fetchOne() метод. Это использует fetchCount():

int count =
DSL.using(configuration)
   .fetchCount(DSL.selectFrom(Table));

Остерегайтесь, однако, что это делает вложенный выбор следующим образом:

SELECT COUNT(*) FROM (SELECT a, b, ... FROM Table)

Я использую следующий синтаксис для этого:

import org.jooq.impl.DSL.count

... 

int count = 
DSL.using(configuration)
   .selectCount()
   .from(Table)
   .fetchOne(count());

Это менее многословно и проще.

Ответ Лукаса датируется 2013 годом, возможно, такого решения не существовало в то время.

Вот решение, которое мы должны использовать, как это

  selectQueryRecord.fetchCount();

Я использовал это:

Integer count = DSL.selectCount().from(Table).where(Table.FIELD.eq(value)).fetchOneInto(Integer.class);

НОТА:

Устаревшее. - 3.5.0 - [#3356] - Этот метод удаляется, так как он до смешного отличается от всех других типов методов ResultQuery.fetch() тем, что он изменяет исходный оператор Select, заключая его в оболочку. В частности, этот метод можно легко спутать с ResultQuery.fetch(Field) или, более конкретно, fetch (count ()), который имеет совершенно другую семантику. Вместо этого используйте DSLContext.fetchCount(Select). Выполните этот запрос в контексте подключенного исполнителя и верните значение COUNT(*).

Я думаю, что правильный способ написать get будет выглядеть так:

 SelectQuery<Record> selectQueryCount = transaction.selectQuery();
 selectQueryCount.addFrom(Table);

 Result<Record> resultObject = selectQueryRecord.fetchCount();
Другие вопросы по тегам