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

如何使用quarkus反应式mysql客户端和mutiny api在mysql中插入和获取上次插入的id

颛孙铭
2023-03-14

我将如何创建事务、插入行、提交事务并获取最后插入的id。所以该方法应该返回一个Uni

return this.client.begin()
   .flatMap(tx -> tx
           .preparedQuery("INSERT INTO person (firstname,lastname) VALUES ($1,$2)")
           .execute(Tuple.of(person.getFirstName(),person.getLastName()))
           .onItem().produceUni(id-> tx.query("SELECT LAST_INSERT_ID()"))
           .onItem().produceUni(res -> tx.commit())
           .onFailure().recoverWithUni(ex-> tx.rollback())
   );

共有1个答案

姜志
2023-03-14

尝试以下操作:

return client.begin().onItem().produceUni(tx -> tx
    .preparedQuery("INSERT INTO person (firstname,lastname) VALUES ($1,$2)").execute(Tuple.of(person.getFirstName(),person.getLastName()))
    .onItem().produceUni(id -> tx.query("SELECT LAST_INSERT_ID()").execute())
    .onItem().apply(rows -> rows.iterator().next().getInteger(0))
    .onItem().produceUni(item -> tx.commit().on().item().produceUni(v -> Uni.createFrom().item(item)))
    .on().failure().recoverWithUni(throwable -> {
        return tx.rollback().on().failure().recoverWithItem((Void) null)
            .on().item().produceUni(v -> Uni.createFrom().failure(throwable));
    })
);

SqlClientHelper将在未来版本中提供给Quarkus(希望是1.6)。您将能够简化为:

return SqlClientHelper.inTransactionUni(client, tx -> tx
    .preparedQuery("INSERT INTO person (firstname,lastname) VALUES ($1,$2)").execute(Tuple.of(person.getFirstName(),person.getLastName()))
    .onItem().produceUni(id -> tx.query("SELECT LAST_INSERT_ID()").execute())
    .onItem().apply(rows -> rows.iterator().next().getInteger(0))
);
 类似资料:
  • 问题内容: 我正在掌握PDO的基础知识。 但是我试图获取插入的行的ID,我使用: 我遇到的教程都是关于交易的,但是我没有使用交易! 问题答案: 您可能正在寻找lastInsertId。“返回最后插入的行或序列值的ID”。

  • 我想在Hibernate中获取最后一个插入值的id。 搜索后: 但是下面的代码给我这个错误: JAVAClassCastException:java。数学无法将BigInteger转换为java。朗·朗 请分享你的想法! 解决方案 不要忘记导入: 导入java.math.大整数;

  • 问题内容: 我看到了这个 在MySQL中,INSERT,UPDATE和DELETE语句的联接工作。在UPDATE或DELETE语句中联接表时,可以更改多个表中的数据。 回答mysql认证指南中的问题。是真的吗 插入连接?一个例子吗? 问题答案: 您可以使用mysql插入… SELECT,这可能就是他们的意思。例如:

  • 我有一个MySQL数据表,详细信息如下: 它正在工作,只是我正在尝试在插入数据后从数据库中获取id号。我该怎么做?

  • 问题内容: 我使用此命令在两列表中插入一些单词: 如何获取每个单词插入行的ID(主键)。我的意思是执行后返回“ 55,56,57”之类的值。MySQL有这样的反应吗? 术语列是。如果一个术语已经存在,MySQL将不会插入它。是否可以返回该重复项的引用(即该术语所在行的ID)?像“55,A响应 12 ,56”。 问题答案: 您可以通过调用框架或MySQL库(使用任何语言)来获取它。 那行不通。插入后

  • 问题内容: 有没有办法插入预设值和我从选择查询中获得的值?例如: 我有“字符串”的值和数字5,但是我必须从这样的选择中找到[int]值: 那给我那个ID放在table1里面。 如何将其合并为一个语句? 问题答案: 使用查询,并将已知值放入: