在jooq中检索selectCount的值

我有一些看起来像这样的代码:

Record record = jooq

.selectCount()

.from(USERS)

.fetchOne();

目前,我正在执行以下操作以获取计数:

Integer count = (Integer) record.getValue(0);

但是似乎必须要有一个更好的解决方案(类型安全…因为这就是使用jooq的全部目的)。有什么建议?

回答:

不幸的是,对于此特定查询,没有很多“更好”的方法来安全地键入count()值。您可以执行以下操作以添加类型安全性:

Field<Integer> f = count();

Integer count = jooq.

.select(f) // Or selectCount(). Replaced it to illustrate the case

.from(USERS)

.fetchOne(f);

问题在于,有关投影的大多数类型信息fetch()在“到达”方法时已“丢失”给Java编译器。没有办法,一个ResultQuery.fetchXXX()方法可以从恢复它SELECT条款,它产生于你。

在jOOQ用户组上,一些用户争辩说将投影fetch()完全移入方法中,完全是C#的LINQ或Scala的SLICK的方法。这将使更高级的SELECT语句的表达大大复杂化。一个更详尽的解释记录在这里。

在jOOQ 3.0中,引入了附加的记录级类型安全性。因此,在jOOQ

3.3中,可以这样获取单个值(已注册为#2246):

<T> T fetchValue(Select<Record1<T>> select);

以上是 在jooq中检索selectCount的值 的全部内容, 来源链接: utcz.com/qa/418171.html

回到顶部