5

我正在使用 MySQL 连接器/C++ 从 C++ 程序与 MySQL 服务器进行通信。出于某种原因(背景见下文),我在某些时候需要原生 C API 连接结构。如何从 Connector/C++ 类中获取它?

背景:

我想将大量数据(最多 2-30 亿个元组)从客户端的主内存加载到服务器中。因此,我想尝试 LOAD DATA INFILE 语句。为了避免首先将整个数据写入文本文件,我想定义我自己的本地 infile 处理程序,它直接从主内存中读取数据。

但是,Connector/C++ 没有设置用户定义的本地 infile 处理程序的方法,但本机 C API 可以。对应的 C 函数 mysql_set_local_infile_handler() 需要一个本地连接处理程序(MYSQL 结构)作为输入参数。那么如何从 Connector/C++ 获取这个处理程序呢?或者有没有更好的方法在连接器/C++ 环境中设置本地 infile 处理程序?

4

2 回答 2

2

您想要sql::mysql::NativeAPI::MySQL_NativeConnectionWrapper::mysql,但它是任何方法都不会返回的私有成员。因此,要访问该结构,您必须分叉连接器/C++ 源代码并编译您自己的连接器。

如果这是您所采取的路径,您可能更愿意提供mysql_set_local_infile_handler()从连接器/C++ 中访问的权限。

于 2013-01-20T14:16:21.557 回答
0

还有另一种方法可以通过 c++ 命令“system”的帮助来解决它。

1)在my.cnf中设置mysql环境:local-infile=1. 你可以在这里找到这个文件:how to know mysql my.cnf location。或者只是在下面提到的 shell 命令行中添加选项。mysql --local-infile [other options]

2) 在您的 c++ 代码中,而不是stmt->execute(...)从 c++ 连接器使用,使用

system("mysql -u username --database=dbname --password=pw -e \"LOAD DATA LOCAL INFILE filename INTO TABLE tablename FIELD TERMINATED BY ',' LINES TERMINATED BY '\n' (column1, column2, column3);\"");

char 数组也可以在程序中进行操作。虽然它看起来“技术含量低”,但它确实在我的项目中完成了工作。

于 2013-06-10T20:25:48.030 回答