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<int>
是有序的,这意味着对于不同于 1、2 和 3 的输入,您的值可能会以与您想要的不同的顺序存储。
我建议改为std::vector<int>
。
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值?