当前位置: 首页 > 面试题库 >

在jooq中检索selectCount的值

罗俭
2023-03-14
问题内容

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

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);


 类似资料:
  • 回到Jooq2.5,看起来可以通过FactoryOperations类设置PostgreSQL搜索路径,但Jooq3.5中没有该类。显然,FactoryOperations分为DSL和DSLContext,但我似乎找不到use(Schema)方法的结尾。如何在较新版本的jOOQ中设置PostgreSQL搜索路径?

  • 问题内容: 我正在使用一个每个键有两个值的Multimap。下面是我用来分别获取每个值的代码: 代码的第一位获取第一个对象值: 然后,我正在使用另一种方法来检索其他值。此方法将第一个对象作为参数: 这似乎是一种“骇人的”做事方式,那么我有什么办法可以更轻松地获得价值? 问题答案:

  • 我在JOOQ中有一个查询,其中包含一个带有另一个表的左OUTER JOIN。这是有意的,因为不能保证相应的记录会存在,在这种情况下,我仍然希望从以前的表中检索值,并为缺失的字段提供默认值。 但是,由于带有默认参数的函数已被弃用,我如何检查字段是否包含空值? 使用字符串很容易,但布尔值只返回为,这意味着我无法检查它是否真的设置为false,或者它正是JOOQ决定返回的。 我试过: 但是这不起作用,因

  • 我正在使用JooQ在Aurora MySQL上执行CRUD操作。 我有以下场景: 如果由于重复密钥异常导致插入失败,请再次重试相同的操作,否则忽略该异常 有 启用OnDuplicateKeyUpdate时,如果记录存在,它似乎会盲目更新数据库中的记录。我的用例是,如果数据库中存在记录,则在满足更新条件的情况下更新记录。 我可以在插入和更新的两个单独调用中做到这一点,但是有没有办法在单个调用中做到这

  • 我有一个这种格式的数据框 我希望使用数据帧操作获得基于行的特定值的所有(索引、列)对。所有(索引、列、行值)对都是唯一的。 我研究了这个问题:pythonic方法获取索引,column for value==1 虽然这个问题和我的问题完全一样,但这个问题的答案有点模糊,我无法根据这些答案得到我想要的。 我也看过类似的: a) 从数据框中选择特定索引、列对 b) Python:获取与特定值匹配的行的

  • 问题内容: 我正在制作一个程序,可以从我创建的数据库中检索字段的输入数据/值。但是,当我运行它时,输出始终为null。不知道怎么了 这是我的代码: 在我的主班我有以下代码: 我不知道为什么我运行它时总是说null。 问题答案: 您实际上并没有在设置员中“设置”任何东西。 最重要的是:我对getter和setter的理解使您可以在getter中进行查询。