【问题标题】:C++ XDevAPI multiple .valuesC++ XDevAPI 多个 .values
【发布时间】:2020-12-12 22:23:03
【问题描述】:

我正在使用 Xcode、MySQL 和 XDevAPI。

我在数据库中有下表

create table TABLE(ID INT, VALUE_01 INT, VALUE_02 INT, VALUE_03 INT);

我对代码的编码有以下价值观:

Table table(session, "TABLE");
int id;
set<int> numbers;

id = 2395;
numbers.insert(1);
numbers.insert(2);
numbers.insert(3);

所以我想试试:

table.insert("ID", "VALUE_01", "VALUE_02", "VALUE_03")
  .values(id)
  .values(numbers)
  .execute();

但是,我收到运行时错误消息:

libc++abi.dylib:以 mysqlx::abi2::r0::Error 类型的未捕获异常终止:CDK 错误:正在插入的行中的字段数错误

你能帮帮我吗?

【问题讨论】:

    标签: c++ mysql xcode mysql-x-devapi


    【解决方案1】:

    这里有两个问题。

    首先,您调用values 两次而不是一次,而且两次都使用错误的 [number of] 参数。您应该提供values()每行一次,每次为该行中的每个字段提供一个值(ref)

    其次,std::set&lt;int&gt;有序的,这意味着对于不同于 1、2 和 3 的输入,您的值可能会以与您想要的不同的顺序存储。

    我建议改为std::vector&lt;int&gt;

    Table table(session, "TABLE");
    int id;
    vector<int> numbers;
    
    id = 2395;
    numbers.push_back(1);
    numbers.push_back(2);
    numbers.push_back(3);
    
    table.insert("ID", "VALUE_01", "VALUE_02", "VALUE_03")
      .values(id, numbers[0], numbers[1], numbers[2])
      .execute();
    

    【讨论】:

    • 查看 CRUD 函数的图表,.values() 应该只是 ADD 列,您可以在同一个插入中多次调用它,对吗? dev.mysql.com/doc/x-devapi-userguide/en/…
    • @Nuno 你可以多次调用它,是的....添加几个。查看语法并没有告诉我们有关语义的任何信息。不幸的是,至少可以说缺少 X DevAPI 的文档,但我们可以从我链接的参考页面中看出应该发生的事情。这也非常接近地反映了在 SQL 中如何完成表插入,我敢肯定这不是偶然的。
    • @Nuno 想一想他们为什么允许您通过将字段值放入现有的 values() 调用或添加额外的 values() 调用来添加字段值。这样的冗余设计会实现什么?每当文档看起来含糊不清时,我们可以考虑这些事情以做出更好的猜测。
    • 烦人的是我不能使用.values(id, numbers)! :) 我想我将不得不添加另一个可变参数版本的.values()! :)
    • @Nuno 是的,我知道这有点烦人。即使您没有 ID 字段,.values(numbers) 也不会是正确的,因为这是用于 Row 对象的容器,而不是单行的参数。嗯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多