先给个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; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
//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、用上述程序就可以连接(数据库地址之类的,自己改掉)
所有评论(0)