標籤:
/* ============================================================================ Name : mysql1.c Author : wuyq Version : Copyright : Your copyright notice Description : Hello World 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 1024MYSQL mysql, *connection;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); ////SQL = DELETE FROM table1 WHERE name = '飯島愛'printf("'%s'\n", SQL);}void insertname(char *SQL){memset(SQL, 0, BUFSIZE);sprintf(SQL, "%s", "請輸入要插入的名字>:");write(STDOUT_FILENO, SQL, BUFSIZE); //這句話是替代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));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));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));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); ////SQL = DELETE FROM table1 WHERE name = '飯島愛'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));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));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));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); ////SQL = DELETE FROM table1 WHERE name = '飯島愛'printf("'%s'\n", SQL);}void selectname(const char *SQL){/*char SQL[1024];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);if (strlen(name) == 0) //使用者沒有任何輸入,只是敲了斷行符號,長度為0了{sprintf(SQL, "SELECT * FROM table2"); //} else{sprintf(SQL, "SELECT * FROM table2 where name = '%s'", name); //}*/if (mysql_query(connection, SQL) != 0){printf("query error, %s\n", mysql_error(&mysql));}//調用mysql_store_result得到查詢結果,結果放到MYSQL_RES結構當中MYSQL_RES *result = mysql_store_result(connection);//要知道返回資料集有多少列才能自由的使用各種SELECT語句MYSQL_FIELD *field;int iFieldCount = 0;while (1){field = mysql_fetch_field(result); //迴圈得到列名,如果迴圈到了列的最後,函數返回NULLif (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 serverconnection = mysql_real_connect(&mysql, args[1], args[2], args[3], args[4],0, 0, 0);if (connection == NULL){printf("connect error, %s\n", mysql_error(&mysql));return -1;}if (mysql_query(connection, "SET NAMES utf8") != 0)//設定字元集為UTF8{printf("設定字元集錯誤, %s\n", mysql_error(&mysql));}char buf[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);}mysql_query(connection, buf);}mysql_close(connection);//斷開與SQL server的串連puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */return EXIT_SUCCESS;}
【C/C++學院】(15)資料庫編程--C語言操作資料庫