MariaDB C API column-wise bind null values [关闭]

oxiaedzo  于 10个月前  发布在  其他
关注(0)|答案(1)|浏览(72)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答这个问题。
13天前关闭
Improve this question
我使用的是Mariadb C API。我可以有一个用空值绑定列数据的示例吗?
我一直在效仿这个例子:https://mariadb.com/kb/en/bulk-insert-column-wise-binding/
下面的代码是我所拥有的代码的一部分:

double test_data[1] = {1,NULL,2};
my_bool *isNull = new my_bool[3];
isNull[0] = '0';
isNull[1] = '1';
isNull[2] = '0';

MYSQL_BIND *bind = new MYSQL_BIND;

bind.buffer_type = MYSQL_TYPE_DOUBLE;
bind.buffer = &test_data;
bind.is_null = isNull;

mysql_stmt_attr_set(insertStmt, STMT_ATTR_ARRAY_SIZE,&numRows);
mysql_stmt_bind_param(insertStmt,bind);
mysql_stmt_execute(insertStmt);

字符串
但它不会将test_data中的NULL值绑定为null,而是返回0。
这是用C++编译的。

fdx2calv

fdx2calv1#

is_null绑定参数仅在逐行执行语句时有效。
当在MariaDB二进制协议中添加批处理操作时,我们注意到缺少了几件事:例如支持默认值、忽略值。因此,我们没有向bind结构添加额外的成员,而是添加了一个包含指示符的联合。除了你的数据数组,你还需要一个指标数组:

char indicator[3]= {0, STMT_INDICATOR_NULL, 0};

bind[0].u.indicator= &indicator[0];

字符串
除了STMT_INDICATOR_NULL之外,还支持以下指示符:

  • STMT_INDICATOR_NTS(零终止字符串,您不必提供缓冲区长度)
  • STMT_INDICATOR_DEFAULT(使用列默认值)
  • STMT_INDICATOR_IGNORE(忽略更新值)
  • STMT_INDICATOR_IGNORE_ROW(忽略整行)

您可以在Connector/C unittests中找到一些批处理执行的示例。
关于你的代码的一些评论:

  • test_data[1]不能存储3个不同的值
  • bind是一个指针,所以你需要用bind->member而不是bind.member赋值

相关问题