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

如何使用R2DBC语句。fetchsize exaclty作品

韦胜泫
2023-03-14

我正在使用r2dbc postgresql驱动程序。假设我们有一个包含1000条记录的表,fetchSize是100:

connectionMono.flatMapMany(
                connection -> connection
                        .createStatement("select age from users")
                        .fetchSize(100)
                        .execute())

将执行多少网络呼叫?我知道使用JDBC语句。SetFetchsize,驱动程序将获取10批中的所有行,每批100行。

共有1个答案

云景焕
2023-03-14

查看r2dbc驱动程序中的代码,行为是相同的:它按指定大小的块获取行,在您的情况下为100。

以下是在ExtendedQueryMessageFlow中处理的方法代码:

    /**
     * Execute the query and indicate to fetch rows in chunks with the {@link Execute} message.
     *
     * @param bindFlow  the initial bind flow
     * @param client    client to use
     * @param portal    the portal
     * @param fetchSize fetch size per roundtrip
     * @return the resulting message stream
     */
    private static Flux<BackendMessage> fetchCursored(Flux<FrontendMessage> bindFlow, Client client, String portal, int fetchSize) {

        DirectProcessor<FrontendMessage> requestsProcessor = DirectProcessor.create();
        FluxSink<FrontendMessage> requestsSink = requestsProcessor.sink();
        AtomicBoolean isCanceled = new AtomicBoolean(false);

        return client.exchange(bindFlow.concatWithValues(new CompositeFrontendMessage(new Execute(portal, fetchSize), Flush.INSTANCE)).concatWith(requestsProcessor))
            .handle((BackendMessage message, SynchronousSink<BackendMessage> sink) -> {
                if (message instanceof CommandComplete) {
                    requestsSink.next(new Close(portal, PORTAL));
                    requestsSink.next(Sync.INSTANCE);
                    requestsSink.complete();
                    sink.next(message);
                } else if (message instanceof ErrorResponse) {
                    requestsSink.next(Sync.INSTANCE);
                    requestsSink.complete();
                    sink.next(message);
                } else if (message instanceof PortalSuspended) {
                    if (isCanceled.get()) {
                        requestsSink.next(new Close(portal, PORTAL));
                        requestsSink.next(Sync.INSTANCE);
                        requestsSink.complete();
                    } else {
                        requestsSink.next(new Execute(portal, fetchSize));
                        requestsSink.next(Flush.INSTANCE);
                    }
                } else {
                    sink.next(message);
                }
            })
            .as(flux -> Operators.discardOnCancel(flux, () -> isCanceled.set(true)));
    }
 类似资料:
  • 问题内容: 我正在学习Python,并且已经到达有关该语句的部分。我正在使用的指南将其定义Null为通常用作占位符的语句。 我仍然不完全明白那是什么意思。有人可以告诉我一个简单/基本的情况下使用该语句以及为什么需要该语句吗? 问题答案: 假设你正在使用尚未实现的某些方法设计一个新类。 如果你不使用,则代码将无法运行。 然后,你将获得: 总而言之,该pass语句没有什么特别之处,但是可以充当占位符,

  • 我正在尝试编写一个程序,可以将字母表中的任何字母(大小写)转换成拼音字母表。例如,如果我输入“a”或“a”,我的程序将给我(更改为)“alpha”。我对这个和switch语句做了很多研究,但我总是卡住。我已经意识到我不能在扫描仪中使用“char”。然而,当我将“char”更改为“string”时,我的switch语句就会出错(特别是代码中的toUpperCase被下划线。我看不出我的错误。下面是我

  • 问题内容: 我正在上高中AP计算机科学课程。 我决定在我们的一个实验室里发表一个声明,只是为了玩弄,但是我遇到了这个错误。 我问了一个关于Stackoverflow 的问题,以找出如何正确执行它,并且我所做的完全如答案之一所示。我真的不明白为什么编译器想要一个语句(至少这是我假设的要求),我也不知道如何使用。似乎希望重新启动的部分是一个变量,但是重新启动只是将程序拉回到第10行的标签,以便用户可以

  • 我的问题是:当我选择错误的数字时,它会转到循环的开始。我希望它转到要求选择的部分(int choice=scanner.nextInt();)再问一遍。“1”->切换,“2”->“退出”,“3”->再次询问选择。

  • 问题内容: 我正在寻找某种if语句来控制不同元素的状态。 我已经尝试了以下内容,但无法编译 问题答案: LESS具有用于mixin的保护表达式,而不是单个属性。 因此,您将创建一个像这样的mixin: 并通过调用或(或完全不调用)将其打开或关闭。

  • 问题内容: 如何在JSON中使用if语句这是代码:............................................... .................................................................. 这是必需的结果,如下所示: 实际上,这种方式是错误的,并且会导致JavaScript语法错误。 问题答案: 那是普通的J