【发布时间】:2013-11-08 12:51:02
【问题描述】:
现在我正在将 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);
【问题讨论】:
这是我们必须这样使用的解决方案
selectQueryRecord.fetchCount();
【讨论】:
已弃用。 - 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();
【讨论】:
.fetchCount() 现已弃用 @Lukas Elder 的答案现在是正确的。不是这个。
使用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)
【讨论】:
DSLContext 类型有关。但请提出一个新的 Stack Overflow 问题(和/或写信至jOOQ User Group)以了解与事务处理相关的问题
long,即使JDBC使用了一个int(没有必要如果 long 更合适并容纳一个 int),则“匹配”JDBC,以及 2)我希望“我们”最终可以改变它,即使这对我现在没有任何影响——也许有一天它可能! :) 无论如何,我只是好奇并感谢您的回答——以及伟大的图书馆。
int.class 时,jOOQ 永远不会抛出 NPE,而是使用int 类型的默认值,即0。所以,虽然fetchOne() 可能返回null(如果没有结果),而fetchOne(0) 可能返回null(如果没有结果,或者0 位置的值是null),@在这些情况下,987654349@ 将返回 0。
我为此使用以下语法:
import org.jooq.impl.DSL.count
...
int count =
DSL.using(configuration)
.selectCount()
.from(Table)
.fetchOne(count());
这不那么冗长和简单。
Lukas 的回答是从 2013 年开始的,也许当时这个解决方案并不存在。
【讨论】:
我用过这个:
Integer count = DSL.selectCount().from(Table).where(Table.FIELD.eq(value)).fetchOneInto(Integer.class);
【讨论】: