前几天公司让我做C语言和MySQL数据库的交互操作,费了九牛二虎之力之后总算做出来了,今天特地把源代码贴出来供大家学习;如有人想要打包项目可以加我QQ260990509,注明技术交流,即可获得打包之后的项目!
#if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
#include <winsock.h>
#include <iostream.h>
#include <string.h>
MYSQL mysql,*sock; //定义数据库连接的句柄,它被用于几乎所有的MySQL函数
MYSQL_RES *res; //查询结果集,结构类型
MYSQL_FIELD *fd ; //包含字段信息的结构
MYSQL_ROW row ; //存放一行查询结果的字符串数组
char qbuf[300]; //存放查询sql语句字符串
//定义数据库操作的宏,也可以不定义留着后面直接写进代码
#define MAX_STRING_LENGTH 256
//定义元素个数
#define MAX_ELEMENT_LENGTH 33
//定义显示的列数
#define ELEMENTS_PER_LINE 15
typedef struct
{
char line[MAX_STRING_LENGTH];
char data[ELEMENTS_PER_LINE][MAX_ELEMENT_LENGTH];
}DATA;
void main()
{
//申明数据库操作函数
int insertData(DATA parameter);
//打开指定文件
FILE *fp=fopen("E://file.txt","r");
//创建结构体类型实体
DATA data;
memset(&data, 0x00, sizeof(DATA));
//得到一行数据
fgets(data.line, MAX_STRING_LENGTH, fp);
while (!feof(fp))
{
int i=0,index=0;
for(i=0; i<ELEMENTS_PER_LINE; i++)
{
//分隔字符串 按逗号分隔
sscanf(data.line+index,"%[^,]", data.data[i]);
index+=strlen(data.data[i])+1;
}
insertData(data);
printf("line=%s/n", data.line);
//循环打印,每行的数据分隔之后的数据
for(i=0; i<ELEMENTS_PER_LINE; i++)
{
printf("data[%d]=%s/n", i,data.data[i]);
}
printf("/n/n");
//再次读取一行数据
fgets(data.line, MAX_STRING_LENGTH, fp);
}
}
//连接数据库 执行插入数据操作 参数为每次构造起来的实体指针
int insertData(DATA parameter)
{
//初始化MySQL服务器
mysql_init(&mysql);
//获得连接
if (!(sock = mysql_real_connect(&mysql,"localhost","root","19890505","test",0,NULL,0))) {
fprintf(stderr,"Couldn't connect to engine!/n%s/n/n",mysql_error(&mysql));
perror("");
exit(1);
}
//以指定格式构建差爱如语句字符串
sprintf(qbuf,"insert into postranceaction values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",parameter.data[0],parameter.data[1],parameter.data[2],parameter.data[3],parameter.data[4],parameter.data[5],parameter.data[6],parameter.data[7],parameter.data[8],parameter.data[9],parameter.data[10],parameter.data[11],parameter.data[12],parameter.data[13],parameter.data[14]);
//执行插入操作 并判断是否插入成功,
if(mysql_query(sock,qbuf))
{
//如果插入数据出错,则告知系统用户
printf("插入数据出现错误/n");
printf("Couldn't get result from %s/n", mysql_error(sock));
}
else
{
//如果插入数据成功,告知系统用户插入数据成功
printf("当前数据插入成功/n");
}
//关闭数据库连接
mysql_close(sock);
return 0;
}
//C语言实现数据查询操作
int addData()
{
mysql_init(&mysql);
if (!(sock = mysql_real_connect(&mysql,"localhost","root","19890505","test",0,NULL,0))) {
fprintf(stderr,"Couldn't connect to engine!/n%s/n/n",mysql_error(&mysql));
perror("");
exit(1);
}
sprintf(qbuf,SELECT_QUERY,2);
if(mysql_query(sock,qbuf)) {
fprintf(stderr,"Query failed (%s)/n",mysql_error(sock));
exit(1);
}
if (!(res=mysql_store_result(sock))) {
fprintf(stderr,"Couldn't get result from %s/n", mysql_error(sock));
exit(1);
}
printf("number of fields returned: %d/n",mysql_num_fields(res));
while (row = mysql_fetch_row(res)) {
printf("Ther userid is %d username is: %s/n",row[0],row[1]) ;
puts( "query ok !/n" ) ;
}
mysql_free_result(res);
mysql_close(sock);
exit(0);
return 0; //. 为了兼容大部分的编译器加入此行
}
/*
程序注意事项:
项目编译的时候需要用到的文件有:
mysql.h LIBCPD.LIB libmysql.dll LIBCD.LIB libmysql.lib my_alloc.h my_list.h mysql_com.h mysql_time.h mysql_version.h typelib.h
编译程序时候如果需要配置环境变量
工程-->设置-->连接-->对象库/模块 里边添加 libmysql.lib环境变量
此时需要注意的是libmysql.lib这个文件要和你的项目文件放在一起
*/