Я преобразовываю Pure SQL в jOOQ, теперь у меня это
("SELECT Count(*) Count From Table ");
Мне нужно написать это в jOOQ, как мы можем написать его?
selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);
Я преобразовываю Pure SQL в jOOQ, теперь у меня это
("SELECT Count(*) Count From Table ");
Мне нужно написать это в jOOQ, как мы можем написать его?
selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);
Самый простой способ реализовать то, что вы запрашиваете, - это 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();
Я использую следующий синтаксис для этого:
import org.jooq.impl.DSL.count
...
int count =
DSL.using(configuration)
.selectCount()
.from(Table)
.fetchOne(count());
Это менее многословно и проще.
Ответ Лукаса датируется 2013 годом, возможно, такого решения не существовало в то время.
Я использовал это:
Integer count = DSL.selectCount().from(Table).where(Table.FIELD.eq(value)).fetchOneInto(Integer.class);
Устаревшие. - 3.5.0 - [# 3356] - этот метод удаляется, поскольку он смутно отличается от всех других типов ResultQuery.fetch() методов, поскольку он изменяет исходный оператор Select путем упаковки Это. В частности, этот метод можно легко смутить ResultQuery.fetch(Поле) или более конкретная выборка (count()), которая имеет совершенно другая семантика. Использовать DSLContext.fetchCount(Выбрать) вместо. Выполните этот запрос в контексте его подключенного исполнителя и вернуть значение COUNT (*).
Я думаю, что правильный способ написать get count будет таким:
SelectQuery<Record> selectQueryCount = transaction.selectQuery();
selectQueryCount.addFrom(Table);
Result<Record> resultObject = selectQueryRecord.fetchCount();