如何在jOOQ中编写计数查询

时间:2013-10-29 11:28:14

标签: java sql jooq

我现在正在将Pure SQL转换为jOOQ

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

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

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

5 个答案:

答案 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();