/* ============================================================================ Name : mysql1.c Author : suys Version : Copyright : Your copyright notice Description : Link to mysql in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <termios.h> #include <mysql/mysql.h> #define BUFSIZE 1024 MYSQL mysql, *conn; //删除函数 void deletename(char *SQL) { memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入要干掉的名字>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char name[1024]; memset(name, 0, sizeof(name)); read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字 name[strlen(name) - 1] = 0; //将字符串最后一位 替换为0,最后放的整数0而不是字符串'0' memset(SQL, 0, BUFSIZE); sprintf(SQL, "DELETE FROM table1 WHERE name = '%s'", name); printf("%s ", SQL); } //插入数据函数 void insertname(char *SQL) { memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入要插入的名字>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char name[1024]; memset(name, 0, sizeof(name)); read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字 name[strlen(name) - 1] = 0; //将字符串最后一位 替换为0,最后放的整数0而不是字符串'0' memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入要插入的性别>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char sex[1024]; memset(sex, 0, sizeof(sex)); read(STDIN_FILENO, sex, sizeof(sex)); //等待用户输入要删除的名字 sex[strlen(sex) - 1] = 0; //将字符串最后一位 替换为0,最后放的整数0而不是字符串'0' memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入要插入的年龄>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char age[1024]; memset(age, 0, sizeof(age)); read(STDIN_FILENO, age, sizeof(age)); //等待用户输入要删除的名字 age[strlen(age) - 1] = 0; //将字符串最后一位 替换为0,最后放的整数0而不是字符串'0' memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入要插入的班级>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char classes[1024]; memset(classes, 0, sizeof(classes)); read(STDIN_FILENO, classes, sizeof(classes)); //等待用户输入要删除的名字 classes[strlen(classes) - 1] = 0; //将字符串最后一位 替换为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 ", SQL); } //更新数据函数 void updatename(char *SQL) { memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入要修改的名字>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char name[1024]; memset(name, 0, sizeof(name)); read(STDIN_FILENO, name, sizeof(name)); //等待用户输入要删除的名字 name[strlen(name) - 1] = 0; //将字符串最后一位 替换为0,最后放的整数0而不是字符串'0' memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入修改后的性别>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char sex[1024]; memset(sex, 0, sizeof(sex)); read(STDIN_FILENO, sex, sizeof(sex)); //等待用户输入要删除的名字 sex[strlen(sex) - 1] = 0; //将字符串最后一位 替换为0,最后放的整数0而不是字符串'0' memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入修改后的年龄>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char age[1024]; memset(age, 0, sizeof(age)); read(STDIN_FILENO, age, sizeof(age)); //等待用户输入要删除的名字 age[strlen(age) - 1] = 0; //将字符串最后一位 替换为0,最后放的整数0而不是字符串'0' memset(SQL, 0, BUFSIZE); sprintf(SQL, "%s", "请输入修改后的班级>:"); write(STDOUT_FILENO, SQL, strlen(SQL)); //这句话替代printf函数,这样写就不需要 也能相输出屏幕输出 char classes[1024]; memset(classes, 0, sizeof(classes)); read(STDIN_FILENO, classes, sizeof(classes)); //等待用户输入要删除的名字 classes[strlen(classes) - 1] = 0; //将字符串最后一位 替换为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 ", SQL); } //查询 void selectname(const char *SQL) { if(mysql_query(conn, SQL) != 0) { printf("query error, %s ", 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 ", field->name); iFieldCount++; } printf(" "); //循环遍历每一行 MYSQL_ROW row; while(1) { row = mysql_fetch_row(result); if(row == NULL) break; int i = 0; for(; i < iFieldCount; i++) printf("%s ", (const char *)row[i]); printf(" "); } 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 ", mysql_error(&mysql)); return -1; } if(mysql_query(conn, "SET NAMES utf8") != 0) { printf("设置字符集错误,%s ", mysql_error(&mysql)); } char buf[BUFSIZE]; memset(buf, 0, sizeof(buf)); strcpy(buf, "请选择 1:插入 2:删除 3:修改 4:查询 "); 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 ", mysql_error(&mysql)); } } mysql_close(conn); puts("Hello World "); return EXIT_SUCCESS; }