C++ XDevAPI 多个 .values

Posted

技术标签:

【中文标题】C++ XDevAPI 多个 .values【英文标题】:C++ XDevAPI multiple .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 错误:正在插入的行中的字段数错误

你能帮帮我吗?

【问题讨论】:

【参考方案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 对象的容器,而不是单行的参数。嗯。

以上是关于C++ XDevAPI 多个 .values的主要内容,如果未能解决你的问题,请参考以下文章

c++中怎样读取python字典,获得字典中的key值(一个key中有多个值)和value值?

在 C++ 中使用具有相同类的多个模板

C++中同一个变量的多个名称

C++ 字符串 多个<< << <<

运行任意 SQL 命令 MySQL C++ (X DevAPI)?

使用 Mysql xdevapi