当前位置: 首页 > 知识库问答 >
问题:

Jooq 3.14.1 fetchLazy,postgres获取所有行

满雨石
2023-03-14

我是新来的jooq,并试图与postgres使用fetchLazy。

我像下面这样修改了本文中提到的数据访问代码

// BookService.java
public List<Book> getBooks(){
    final List<Book> books = new ArrayList<>();
    ResultQuery<BookRecord> resQuery = context.selectFrom(Tables.BOOK).fetchSize(2);
    transactionRunner.readOnlyTransaction(() -> {
        try(final Cursor<BookRecord> bookRecords = resQuery.fetchLazy()) {
            while (bookRecords.hasNext()) {
                List<Book> into = bookRecords.fetch().into(Book.class);
                System.out.println("Num Records: " + into.size());
                books.addAll(into);
            }
        }
    });
    return books;
}

我的交易代码如下所示-

public class TransactionalRunner {
  private final PlatformTransactionManager manager;

  public void readOnlyTransaction(Runnable fn) {
    var template = new TransactionTemplate(manager);
    template.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
    template.execute(
        transactionStatus -> {
          fn.run();
          return null;
        });
  }
}

为了测试,我在数据库中添加了4条记录。即使fetchSize设置为2,我也会在一次获取中获取所有4条记录。

Num Records: 4

所有修改过的代码都放在github中。

有人能让我知道出了什么问题吗?

  • Jooq版本3.14.1

Postgres以码头工人的身份运行

docker run --name tuk-temp -p 58704:5432 -e POSTGRES_PASSWORD=postgres postgres

共有1个答案

韦辰钊
2023-03-14

需要在fetchNext中指定大小。

// BookService.java
public List<Book> getBooks(){
    final List<Book> books = new ArrayList<>();
    ResultQuery<BookRecord> resQuery = context.selectFrom(Tables.BOOK).fetchSize(2);
    transactionRunner.readOnlyTransaction(() -> {
        try(final Cursor<BookRecord> bookRecords = resQuery.fetchLazy()) {
            while (bookRecords.hasNext()) {
                List<Book> into = bookRecords.fetchNext(2).into(Book.class);
                System.out.println("Num Records: " + into.size());
                books.addAll(into);
            }
        }
    });
    return books;
}
 类似资料:
  • 问题内容: 目前,我正在使用以下程序从elasticsearch中提取ID及其严重性信息。 我相信默认情况下查询返回10行。我在elasticsearch中有超过10000行。我需要获取所有信息。 有人可以指导我如何运行同一查询以获取所有记录吗? 问题答案: 您可以使用helper函数来从索引中检索所有文档:

  • 问题内容: 我正在尝试编写一个查询,以获取每个新闻的所有新闻和所有评论。我当前的查询是: 但是,当我以数组的形式获取查询时,它通过注释为我提供了一个键,而我希望通过新闻和一个子数组中的所有注释来获得一个键。 就像是: 谢谢! 问题答案: 您无法在一个查询中做到这一点-最好采用您已得到的查询并对所得到的答案进行后处理以获得所需的数据结构。 为了进一步详细说明-任何SQL查询只能返回二维数据数组-一维

  • 问题内容: 在带有Python的Selenium中,是否可以将WebElement的所有子级作为列表获取? 问题答案: 是的,您可以通过或实现。 但是,这听起来并不像查找某个元素的 所有子 元素的有效用例。要获得所有直接/间接孩子都是昂贵的手术。请进一步说明您要做什么。应该有更好的方法。

  • 问题内容: 使用来获取Cookie 似乎很简单,它似乎将Cookie存储在其他位置。 我做了一些研究,然后从对象中获取了一些Cookie 。但是,其中不包含: 奇怪的是,ios 9中还有一个类负责管理中的cookie ,但是,该类不包含用于检索cookie数据的公共方法: 是否有解决方法来获取Cookie数据? 问题答案: 最后,对于登陆iOS的11。 https://developer.appl

  • 问题内容: 有没有一种方法可以通过sql语句或vba代码从访问文件中返回所有表?“我不知道桌子的名字” 例如,当您希望表中包含所有字段时,无论字段名称如何,都使用“ *”。 但是如何获得所有表? 问题答案: 这将带回MS Access数据库中的所有表(包括链接表) 它还包含Sys表,因此您可能要排除以 MSys 开头的表 __ 看一下 使用MSysObjects 选择“表” AS [表],MSys

  • 在Selenium和Python中,是否可以将WebElement的所有子元素作为列表?