先给个MYSQL对于C的API
具体代码,改为手动提交,每次5W数据
//mysql所需的头文件和库文件
//mysql所需的头文件和库文件
#include "winsock.h"
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
#include<fstream>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
//配置文件
ifstream configFin("config.txt");
ifstream filefin("filelist.txt");//要处理的文件列表
string processFile;//要处理的文件名字
string dbhost;//数据库主机
string dbuser;//数据库用户名
string dbpwd;//数据库密码
string dbname;//数据库名字
int eachProcessCount=50000;//每次处理的个数
string tmp;
//将文件列表放到vector里
vector<string> filevec;
while(filefin>>tmp) filevec.push_back(tmp);
configFin>>tmp>>dbhost>>tmp>>dbuser>>tmp>>dbpwd>>tmp>>dbname>>tmp>>eachProcessCount;
unsigned int port = 3306; //server port
for(int fi=0; fi!=filevec.size(); ++fi){
//每次循环,处理一个文件
processFile = filevec[fi];
cout<<"文件:"<<processFile<<endl;
MYSQL myCont;
mysql_init(&myCont);
string uid, friendid;
ifstream fin(processFile.c_str());
int i=0;
int eachCount = 0;
string sql;
while(!fin.eof()){
if(mysql_real_connect(&myCont,dbhost.c_str(),dbuser.c_str(),dbpwd.c_str(),dbname.c_str(),port,NULL,CLIENT_MULTI_STATEMENTS)){
mysql_autocommit(&myCont,0);
mysql_query(&myCont, "SET NAMES utf8");
for(eachCount=0; eachCount<eachProcessCount; ++eachCount){
if(fin>>uid>>friendid){
//如果还有内容,那么就构建插入语句
sql = "insert into friendlist values('"+uid+"','"+friendid+"');";
mysql_query(&myCont, sql.c_str());
} else {
break;
}
}
cout<<". ";
mysql_commit(&myCont);
mysql_close(&myCont);//断开连接
}else{
cout<<"connect failed!"<<endl;
}
}
cout<<endl;
fin.close();
}
system("pause");
return 0;
}
大致说一下C链接MYSQL的方法:
1、去官方下载mysql和c的connector
2、拷贝里面的lib目录下的dll和lib文件到当前目录下
3、设置当前项目的头文件位下载的目录下的inlcude
4、设置一个lib库(在项目设置里),设置第2步的文件名
5、用上述程序就可以连接(数据库地址之类的,自己改掉)