我现在正在将Pure SQL转换为jOOQ
("SELECT Count(*) Count From Table ");
我必须在jOOQ写这个怎么写呢?
selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);
答案 0 :(得分:55)
使用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);
还有另一种方法可以获取任意select
表达式的count(*)
,这有助于您避免指定结果列索引并输入上述fetchOne()
方法。这使用fetchCount()
:
int count =
DSL.using(configuration)
.fetchCount(DSL.selectFrom(Table));
请注意,这会呈现如下的嵌套选择:
SELECT COUNT(*) FROM (SELECT a, b, ... FROM Table)
答案 1 :(得分:1)
以下是我们必须使用的解决方案
selectQueryRecord.fetchCount();
答案 2 :(得分:0)
为此,我使用以下语法:
import org.jooq.impl.DSL.count
...
int count =
DSL.using(configuration)
.selectCount()
.from(Table)
.fetchOne(count());
这不太冗长和简单。
卢卡斯(Lukas)的回答可以追溯到2013年,也许这个解决方案当时不存在。
答案 3 :(得分:0)
我用了这个:
Integer count = DSL.selectCount().from(Table).where(Table.FIELD.eq(value)).fetchOneInto(Integer.class);
答案 4 :(得分:-1)
已过时。 - 3.5.0 - [#3356] - 正在删除此方法 与所有其他类型的ResultQuery.fetch()容易混淆 方法,因为它通过换行修改原始的Select语句 它。特别是,这种方法很容易混淆 ResultQuery.fetch(Field),或者更具体地是fetch(count()),它具有 完全不同的语义。使用DSLContext.fetchCount(选择) 代替。在其附加的执行程序的上下文中执行此查询 并返回COUNT(*)值。
我认为写入计数的正确方法是这样的:
SelectQuery<Record> selectQueryCount = transaction.selectQuery();
selectQueryCount.addFrom(Table);
Result<Record> resultObject = selectQueryRecord.fetchCount();