簡體   English   中英

如何從MySQL Connector / C ++獲取本機C API連接結構?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM