5

MySQL Connector / C ++を使用して、C++プログラムからMySQLサーバーと通信しています。何らかの理由で(背景については以下を参照)、ある時点でネイティブCAPI接続構造が必要になります。Connector / C ++クラスから取得するにはどうすればよいですか?

バックグラウンド:

クライアントのメインメモリからサーバーに大量のデータ(最大20〜30億タプル)をロードしたいと思います。したがって、LOADDATAINFILEステートメントを試してみたいと思います。最初にデータ全体をテキストファイルに書き込まないようにするために、メインメモリから直接データを読み取る独自のローカルinfileハンドラーを定義します。

ただし、Connector / C ++には、ユーザー定義のローカルinfileハンドラーを設定するメソッドはありませんが、ネイティブCAPIにはあります。対応するC関数mysql_set_local_infile_handler()には、入力パラメーターとしてネイティブ接続ハンドラー(構造体MYSQL)が必要です。では、Connector / C ++からこのハンドラーを取得するにはどうすればよいですか?または、Connector / C ++環境でローカルのinfileハンドラーを設定するためのより良い方法はありますか?

4

2 に答える 2

2

が必要ですsql::mysql::NativeAPI::MySQL_NativeConnectionWrapper::mysqlが、どのメソッドからも返されないプライベートメンバーです。したがって、構造にアクセスするには、Connector / C ++ソースをフォークし、独自のコネクタをコンパイルする必要があります。

それがあなたがたどる道であるなら、mysql_set_local_infile_handler()Connector /C++内からのアクセスを提供することを好むかもしれません。

于 2013-01-20T14:16:21.557 に答える
0

c++コマンド「システム」の助けを借りてそれを回避する別の方法があります。

1)my.cnfでmysql環境を設定しますlocal-infile=1。このファイルはここにあります:mysqlmy.cnfの場所を知る方法。または、下記のシェルコマンドラインにオプションを追加するだけです。mysql --local-infile [other options]

stmt->execute(...)2)c ++コードでは、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 に答える