代码之家  ›  专栏  ›  技术社区  ›  jorlow

正在jooq中检索selectCount的值

  •  8
  • jorlow  · 技术社区  · 12 年前

    我有一些代码如下所示:

    Record record = jooq
        .selectCount()
        .from(USERS)
        .fetchOne();
    

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

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

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

    1 回复  |  直到 12 年前
        1
  •  7
  •   Lukas Eder    11 年前

    不幸的是,对于这个特定的查询,没有太多“更好”的方法可以安全地键入 count() 价值为了增加类型安全性,您可以做的是:

    Field<Integer> f = count();
    Integer count = jooq.
        .select(f) // Or selectCount(). Replaced it to illustrate the case
        .from(USERS)
        .fetchOne(f);
    

    问题是,到 fetch() 方法已“达到”。不可能 ResultQuery.fetchXXX() 方法可以从 SELECT 子句,并将其出示给您。

    在jOOQ用户组中,一些用户主张将投影移动到 获取() 方法,完全像C#的LINQ或Scala的SLICK那样。这会使更高级的表达式非常复杂 选择 声明。一 more elaborate explanation is documented here .

    通过jOOQ 3.0,引入了额外的记录级类型安全。因此,在jOOQ 3.3中,可以获取单个值(已注册为 #2246 ):

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