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

批量插入支持

卢光誉
2023-03-14

我尝试使用r2dbc执行批处理插入。

我已经看到,使用spring boot中的DatabaseClient,这还不可能实现。我尝试使用R2DBC SPI语句和and方法来实现这一点,如下所示:

java prettyprint-override">Mono.from(this.factory.create())
            .map(connection -> connection.createStatement(insertSQL))
            .map(statement -> {
                lines.forEach(line -> {
                    statement
                        .add()
                        .bind(0, line.getId())
                        ;
                });
                return statement;
            })
            .flatMap(statement -> Mono.from(statement.execute()));

我在日志上看到完成了两个插入请求。

2019-12-18 16:27:36.092 DEBUG [] 4133 --- [tor-tcp-epoll-1] io.r2dbc.postgresql.QUERY                : Executing query: insert into table(id) values ($1)
2019-12-18 16:27:36.116 DEBUG [] 4133 --- [tor-tcp-epoll-1] i.r.p.client.ReactorNettyClient          : Request:  Bind{}
2019-12-18 16:27:36.126 DEBUG [] 4133 --- [tor-tcp-epoll-1] io.r2dbc.postgresql.QUERY                : Executing query: insert into table(id) values ($1)
2019-12-18 16:27:36.130 DEBUG [] 4133 --- [tor-tcp-epoll-1] i.r.p.client.ReactorNettyClient          : Request:  Bind{}

添加是执行批更新还是只运行两个请求?

谢谢

共有1个答案

杨晟
2023-03-14

有点晚,但我想总比没有好。我会说您的代码发出了两个单独的请求。使用数据库客户端,我想自从提出这个问题以来,它已经成熟了:

    Mono.from(connectionFactory.create())
        .map(connection -> connection.createBatch())
        .map(batch -> {
            batch.add("delete from table1");
            batch.add("delete from table2");
            batch.add("delete from table3");
            return batch.execute();
        })
        // Etc

运行上述操作时,将记录以下内容:
查询:[“从表1中删除”、“从表2中删除”、“从表3中删除”]绑定:[]

 类似资料:
  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出

  • 问题内容: 这是我在阅读有关jpa批量插入的几个主题之后创建的简单示例,我有2个持久对象User和Site。一个用户可以拥有多个站点,因此我们在这里有一对多的关系。假设我要创建用户并将多个站点创建/链接到用户帐户。考虑到我愿意为Site对象使用批量插入,代码如下所示。 但是,当我运行此代码时(我将hibernate方式用作jpa实现提供程序),我看到以下sql输出: 所以,我的意思是“真实的”批量

  • 问题内容: 我正在使用Python中的MySQLdb模块与数据库进行交互。我遇到的情况是有一个非常大的列表(成千上万个元素),需要将它们作为行插入表中。 我现在的解决方案是生成一个大的语句作为字符串并执行它。 有没有更聪明的方法? 问题答案: 有一种更聪明的方法。 批量插入的问题在于,默认情况下启用了自动提交功能,从而导致每个语句在下一次插入可以启动之前被保存到稳定存储中。 如手册页所述: 默认情

  • 问题内容: 我正在尝试将数据从此链接插入到我的SQL Server https://www.ian.com/affiliatecenter/include/V2/CityCoordinatesList.zip 我创建了表 我正在运行以下脚本来进行批量插入 但是批量插入失败,并出现以下错误 当我使用google时,我发现了几篇文章,指出问题可能出在RowTerminator上,但我尝试了诸如/ n

  • 我有一个从远程源读取数据的curl脚本。以下是当前代码: 然而,脚本的工作是非常缓慢的插入,因为我想象它的写作每一个单独的记录。计数变量是每页返回多少条记录,页面变量是一个简单的页面计数器。 我想知道是否有一种方法可以执行批量插入语句,一次插入所有100条记录。 提前谢谢。

  • 我正在使用Cassandra 3.10,并试图通过每个查询都有一个表来遵循最佳实践,因此我使用批处理插入发音将多个表作为单个事务插入,但我在cassandra日志中出现以下错误。 [zed.payment,zed.trade_party_b_ref,zed.trade_product_type,zed.trade,zed.fx_variance_swap,zed.trade_party_a_ref