31

我现在正在将 Pure SQL 转换为 jOOQ 我有这个

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

我必须在jOOQ中写这个我们怎么写呢?

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

5 回答 5

84

实现您所要求的最直接的方法是,通过使用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)
于 2013-10-30T07:24:08.290 回答
3

我为此使用以下语法:

import org.jooq.impl.DSL.count

... 

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

这不那么冗长和简单。

Lukas 的回答可以追溯到 2013 年,也许当时这个解决方案并不存在。

于 2019-07-10T08:18:52.483 回答
1

这是解决方案我们必须像这样使用

  selectQueryRecord.fetchCount();
于 2013-10-29T11:41:22.640 回答
0

我用这个:

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

于 2019-08-23T18:19:38.463 回答
-1

笔记:

已弃用。- 3.5.0 - [#3356] - 此方法已被删除,因为它与所有其他类型的 ResultQuery.fetch() 方法令人困惑地不同,因为它通过包装修改原始 Select 语句。特别是,这个方法很容易与 ResultQuery.fetch(Field) 混淆,或者更具体地说是 fetch(count()),后者具有完全不同的语义。请改用 DSLContext.fetchCount(Select)。在其附加的执行程序的上下文中执行此查询并返回一个 COUNT(*) 值。

我认为编写获取计数的正确方法是这样的:

 SelectQuery<Record> selectQueryCount = transaction.selectQuery();
 selectQueryCount.addFrom(Table);
 
 Result<Record> resultObject = selectQueryRecord.fetchCount();
于 2013-10-29T11:44:39.973 回答