2013-01-19 53 views
5

我正在使用MySQL Connector/C++從C++程序與MySQL服務器進行通信。出於某種原因(請參閱下面的背景),我需要某種程度上的本地C API連接結構。我如何從Connector/C++類中獲取它?如何從MySQL Connector/C++獲取本機C API連接結構?

背景:

我想從客戶端的主內存中加載一個巨大的數據量(高達2-3元組十億)到服務器。因此,我想嘗試LOAD DATA INFILE語句。爲了避免首先將整個數據寫入文本文件,我想定義自己的本地infile處理程序,該處理程序直接從主內存中讀取數據。

但是,Connector/C++沒有設置用戶定義的本地infile處理程序的方法,但本機C API卻沒有。相應的C函數mysql_set_local_infile_handler()需要一個本地連接處理程序(結構MYSQL)作爲輸入參數。那麼我如何從Connector/C++獲取這個處理程序呢?或者有沒有更好的方法來在Connector/C++環境中設置本地的infile處理程序?

+0

它絕對建立在連接器/ C上。連接器/ C++只是本地C API的附加包裝(順便說一下,本機C API和連接器/ C對於同樣的事情是兩個詞)。它在手冊中多次提到,例如:「MySQL Connector/C++基於MySQL客戶端庫(MySQL C API)」。 (http://dev.mysql.com/doc/refman/5.5/en/connector-cpp-installation-source.html)(評論去了哪裏我回答了!?) – user1494080

回答

2

你想要sql::mysql::NativeAPI::MySQL_NativeConnectionWrapper::mysql,但它是一個私人成員,不是由任何方法返回。因此,要訪問該結構,必須分叉連接器/ C++源代碼並編譯自己的連接器。

如果這是您採取的路徑,您可能更喜歡在Connector/C++中提供對mysql_set_local_infile_handler()的訪問。

+0

太糟糕了。我希望這可以通過「香草」連接器來實​​現。 – user1494080

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);\"");

炭陣列也可以在該程序進行操作。雖然它看起來「低科技」,但它確實在我的項目中完成了工作。