※ ChatGPTを利用し、要約された質問です(原文:MYSQLへのデータサイズの大きなデータの挿入)
MYSQLへのデータサイズの大きなデータの挿入
このQ&Aのポイント
MYSQLに大きなデータを挿入する方法として、C APIを使用することができます。
ファイルの中身をchar型配列に書き出し、配列をクエリにコピーして挿入します。
メモリの無駄遣いを避けるために、データを分割して複数回に分けて挿入する方法や、テキストファイルから直接読み込む方法も考えられます。
C APIを用いて、MYSQLにテキストファイルの中身を格納したいと考えています。
以下のプログラムのように一度ファイルの中身をchar型配列に書き出し、配列の中身をクエリにコピーというようにすると、ファイルの大きさに合わせて、非常に大きな配列を確保しなければならないと思います。
int main(void){
MYSQL mysql;
char query[1000];
char buf[1000];
FILE *fp;
fp = fopen("test.txt", "r");
mysql_init(&mysql);
if(!mysql_real_connect(&mysql,ホスト名,ユーザ名,パスワード,DB名,0,NULL,0)){
//エラー処理
}
fread(buf, sizeof(char), sizeof(buf), fp );
sprintf(query, "insert into DB名 values(buf));
mysql_real_query(&mysql, query, strlen(query));
}
これではメモリの無駄遣いなので、他の方法として、
1.データを分割して複数回に分けて挿入する
2.テキストファイルから直接読み込む
を考えました。
しかし
1.は方法が分からず、
2.はリダイレクトを使えばできると思ったのですが、リダイレクトでは
テキストファイルにSQLコマンドも記入しておく必要があると思うの で、今回の方法には合いません。
MYSQLのフィールドにC言語から大きいデータを書き込むよい方法があれば教えてください。さらには、読み出し方まで教えていただけると助かります。
よろしくお願い致します。
お礼
教えていただいたload_file関数、into outfileを用いて書き込み、読み出しできました!ありがとうございました!! ファイルサイズが大きすぎるというエラーが出ましたが、max_allowed_packet変数を書き換えることで対応できました。 ただ調べてみたところ、ファイルだけでなくディレクトリにも誰でも読み書きできる権限を与える必要がある、サーバ-クライアント形式のシステムにした場合にファイルを一度サーバ側にコピーしなくてはならないなど、あまり使い勝手がよい関数とは言えないようですね。。