先给个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、用上述程序就可以连接(数据库地址之类的,自己改掉)