Как написать запрос 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)
Примечание:
устаревшие. - 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();