相比文件操作,数据库操作真的简单很多,今天只做了一个雏形,有心者可以好好写一下。
#include <stdio.h>
#include <string.h>
#include <mysql.h>
void create_table(MYSQL mysql);
void insert_info(MYSQL mysql);
void show_info(MYSQL mysql);
void sort(MYSQL mysql);
int main()
{
//1、连接服务器
MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,"128.0.47.136","chen","123456","mydb",0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
mysql_query(&mysql, "set names utf8"); //设置编码
//2、CRUD操作(增删改)
// create_table(mysql);
int opt;
printf("1、录入学生信息 2、查询学生信息 3、按数学排名信息\n");
printf("请选择功能 :");
scanf("%d",&opt);
switch(opt)
{
case 1://插入学生信息
insert_info(mysql);
break;
case 2://查询学生信息
show_info(mysql);
break;
case 3://按排名显示学生信息
sort(mysql);
break;
}
//3、关闭
mysql_close(&mysql);
return 0;
}
void create_table(MYSQL mysql)
{
char sql[300] = "create table student_info(name char(10),sno int primary key,chinese int,math int,english int)";
if(mysql_query(&mysql, sql))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
else
{
printf("创建学生信息表成功!\n");
}
}
void insert_info(MYSQL mysql)
{
int n,i;
printf("请输入录入学生总人数:");
scanf("%d",&n);
char sql[300];
char name[10];
int sno;
int chinese;
int math;
int english;
for(i=0;i<n;i++)
{
printf("姓名:");scanf("%s",&name);
printf("学号:");scanf("%d",&sno);
printf("语文成绩:");scanf("%d",&chinese);
printf("数学成绩:");scanf("%d",&math);
printf("英语成绩:");scanf("%d",&english);
sprintf(sql,"insert into student_info values('%s',%d,%d,%d,%d)",name,sno,chinese,math,english);//重点!!!
if(mysql_query(&mysql, sql))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
}
else
{
printf("录入一次信息成功!\n");
}
}
}
void show_info(MYSQL mysql)
{
char sql[300];
strcpy(sql, "select * from student_info");
if(mysql_query(&mysql, sql))//查询
{
fprintf(stderr, "Failed to select: Error: %s\n",
mysql_error(&mysql));
}
else
{
MYSQL_RES* res = NULL;//从堆区申请空间保存一行查询内容
res = mysql_store_result(&mysql);
if(res != NULL)
{
MYSQL_ROW row;
unsigned int num_fields;//一行由多个字段组成
unsigned int i;
num_fields = mysql_num_fields(res);
while ((row = mysql_fetch_row(res)))//依次输出每行
{
for(i = 0; i < num_fields; i++)
{
printf("\t%s", row[i]);//依次输出每行的每个字段(列)
}
printf("\n");
}
mysql_free_result(res);//释放堆区空间
}
else
{
//失败
printf("show failed\n");
}
}
}
void sort(MYSQL mysql)
{
char sql[300];
strcpy(sql, "select * from student_info order by math desc");
if(mysql_query(&mysql, sql))
{
fprintf(stderr, "Failed to select: Error: %s\n",
mysql_error(&mysql));
}
else
{
MYSQL_RES* res = NULL;
res = mysql_store_result(&mysql);
if(res != NULL)
{
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(res);
while ((row = mysql_fetch_row(res)))
{
for(i = 0; i < num_fields; i++)
{
printf("\t%s", row[i]);
}
printf("\n");
}
mysql_free_result(res);
}
else
{
printf("show failed\n");
}
}
}