Как написать запрос Count в 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)

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

  selectQueryRecord.fetchCount();

Примечание:

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

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

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

 Result<Record> resultObject = selectQueryRecord.fetchCount();