/*============================================================================
Name : mysql1.c
Author : suys
Version :
Copyright : Your copyright notice
Description : Link to mysql in C, Ansi-style
============================================================================*/#include#include#include#include#include#include#include
#define BUFSIZE 1024MYSQL mysql,*conn;//删除函数
void deletename(char *SQL)
{
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入要干掉的名字>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char name[1024];
memset(name,0, sizeof(name));
read(STDIN_FILENO, name,sizeof(name)); //等待用户输入要删除的名字
name[strlen(name) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"DELETE FROM table1 WHERE name = ‘%s‘", name);
printf("%s\n", SQL);
}//插入数据函数
void insertname(char *SQL)
{
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入要插入的名字>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char name[1024];
memset(name,0, sizeof(name));
read(STDIN_FILENO, name,sizeof(name)); //等待用户输入要删除的名字
name[strlen(name) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入要插入的性别>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char sex[1024];
memset(sex,0, sizeof(sex));
read(STDIN_FILENO, sex,sizeof(sex)); //等待用户输入要删除的名字
sex[strlen(sex) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入要插入的年龄>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char age[1024];
memset(age,0, sizeof(age));
read(STDIN_FILENO, age,sizeof(age)); //等待用户输入要删除的名字
age[strlen(age) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入要插入的班级>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char classes[1024];
memset(classes,0, sizeof(classes));
read(STDIN_FILENO, classes,sizeof(classes)); //等待用户输入要删除的名字
classes[strlen(classes) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"INSERT INTO table1 (name, sex, age, class) VALUES (‘%s‘, ‘%s‘, %s, %s)", name, sex, age, classes);
printf("%s\n", SQL);
}//更新数据函数
void updatename(char *SQL)
{
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入要修改的名字>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char name[1024];
memset(name,0, sizeof(name));
read(STDIN_FILENO, name,sizeof(name)); //等待用户输入要删除的名字
name[strlen(name) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入修改后的性别>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char sex[1024];
memset(sex,0, sizeof(sex));
read(STDIN_FILENO, sex,sizeof(sex)); //等待用户输入要删除的名字
sex[strlen(sex) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入修改后的年龄>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char age[1024];
memset(age,0, sizeof(age));
read(STDIN_FILENO, age,sizeof(age)); //等待用户输入要删除的名字
age[strlen(age) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"%s", "请输入修改后的班级>:");
write(STDOUT_FILENO, SQL, strlen(SQL));//这句话替代printf函数,这样写就不需要\n也能相输出屏幕输出
char classes[1024];
memset(classes,0, sizeof(classes));
read(STDIN_FILENO, classes,sizeof(classes)); //等待用户输入要删除的名字
classes[strlen(classes) - 1] = 0; //将字符串最后一位\n替换为0,最后放的整数0而不是字符串‘0‘
memset(SQL,0, BUFSIZE);
sprintf(SQL,"UPDATE table1 SET sex = ‘%s‘, age = ‘%s‘, class = ‘%s‘ WHERE name = ‘%s‘", sex, age, classes, name);
printf("%s\n", SQL);
}//查询
void selectname(const char *SQL)
{if(mysql_query(conn, SQL) != 0)
{
printf("query error, %s\n", mysql_error(&mysql));
}//调用mysql_store_result得到查询结果,结果放到MYSQL_RES 结构中
MYSQL_RES *result =mysql_store_result(conn);//要知道返回数据集有多少列才能自由的使用SELECT语句
MYSQL_FIELD *field;int iFieldCount = 0;while(1)
{
field= mysql_fetch_field(result); //循环得到列名,如果循环到列的最后,函数返回NULL
if(field ==NULL)break;
printf("%s\t", field->name);
iFieldCount++;
}
printf("\n");//循环遍历每一行
MYSQL_ROW row;while(1)
{
row=mysql_fetch_row(result);if(row ==NULL)break;int i = 0;for(; i < iFieldCount; i++)
printf("%s\t", (const char *)row[i]);
printf("\n");
}
mysql_free_result(result);
}int main(int arg, char *args[])
{if(arg < 4)return -1;
mysql_init(&mysql); //相当于SQL内部初始化了一个TCP的socket,同时初始化了SQL必须的内存//连接到mysql server
conn = mysql_real_connect(&mysql, args[1], args[2], args[3], args[4], 0, 0, 0);if(conn ==NULL)
{
printf("connect error, %s\n", mysql_error(&mysql));return -1;
}if(mysql_query(conn, "SET NAMES utf8") != 0)
{
printf("设置字符集错误,%s\n", mysql_error(&mysql));
}charbuf[BUFSIZE];
memset(buf,0, sizeof(buf));
strcpy(buf,"请选择\n1:插入\n2:删除\n3:修改\n4:查询\n");
write(STDOUT_FILENO, buf, strlen(buf));
memset(buf,0, sizeof(buf));
read(STDIN_FILENO, buf,sizeof(buf));if(strncmp(buf, "4", 1) == 0) //用户输入的4
{
memset(buf,0, sizeof(buf));
strcpy(buf,"请输入任意的SELECT语句");
write(STDOUT_FILENO, buf, strlen(buf));
memset(buf,0, sizeof(buf));
read(STDIN_FILENO, buf,sizeof(buf));
selectname(buf);
}else{if(strncmp(buf, "1", 1) == 0) //用户输入的1
{
insertname(buf);
}if(strncmp(buf, "2", 1) == 0) //用户输入的2
{
deletename(buf);
}if(strncmp(buf, "3", 1) == 0) //用户输入的3
{
updatename(buf);
}if(mysql_query(conn, buf) != 0)
{
printf("设置字符集错误,%s\n", mysql_error(&mysql));
}
}
mysql_close(conn);
puts("Hello World\n");returnEXIT_SUCCESS;
}