如何从MySQL Connector / C ++获取本机C API连接结构?

时间:2013-01-19 00:33:48

标签: c++ mysql mysql-connector

我正在使用MySQL Connector / C ++从C ++程序与MySQL服务器通信。出于某种原因(请参阅下面的背景知识),我需要在某些时候使用本机C API连接结构。我如何从Connector / C ++类中获取它?

背景:

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

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

2 个答案:

答案 0 :(得分:2)

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

如果这是您采用的路径,您可能更愿意从Connector / C ++中提供对mysql_set_local_infile_handler()的访问权限。

答案 1 :(得分: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 ++代码中,不使用c ++连接器中的stmt->execute(...),而是使用

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数组也可以在程序中操作。虽然看起来“低技术”,但它确实在我的项目中完成了工作。