[英]How can I get the native C API connection structure from MySQL Connector/C++?
我正在使用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處理程序?
你想要sql::mysql::NativeAPI::MySQL_NativeConnectionWrapper::mysql
,但它是一個私有成員,任何方法都不會返回。 因此,要訪問該結構,您必須分叉Connector / C ++源代碼並編譯自己的連接器。
如果這是您采用的路徑,您可能更願意從Connector / C ++中提供對mysql_set_local_infile_handler()
訪問。
還有另一種方法可以通過c ++命令“system”來解決它。
1)在my.cnf中設置mysql環境: local-infile=1
。 你可以在這里找到這個文件: 如何知道mysql my.cnf的位置 。 或者只是在mysql --local-infile [other options]
的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數組也可以在程序中操作。 雖然看起來“低技術”,但它確實在我的項目中完成了工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.