C語言連結資料庫
阿新 • • 發佈:2018-12-31
一、解釋一下函式功能和用法
1.mysql_real_connect
函式原型:MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
引數說明:
host:本地用localhost或127.0.0.1,遠端寫IP;
user、passwd:登陸資料庫的使用者名稱密碼
db:資料庫名
port:資料庫所用的埠(MySQL一般為3306)
unix_socket:先寫個NULL(官方解釋:如果unix_socket不是NULL,該字串描述了應使用的套接字或命名管道)
client_flag:先寫個0(指定特定功能)
2.mysql_real_query
函式原型:int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)
引數說明:
query:SQL語句;
length:SQL語句長度
3.mysql_store_result
函式原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)
返回值說明:具有多個結果的MYSQL_RES結果集合。如果出現錯誤,返回NULL。
4.mysql_fetch_row
函式原型:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
引數說明:具有多個結果的MYSQL_RES結果集合
1.mysql_real_connect
函式原型:MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
引數說明:
host:本地用localhost或127.0.0.1,遠端寫IP;
user、passwd:登陸資料庫的使用者名稱密碼
db:資料庫名
port:資料庫所用的埠(MySQL一般為3306)
unix_socket:先寫個NULL(官方解釋:如果unix_socket不是NULL,該字串描述了應使用的套接字或命名管道)
client_flag:先寫個0(指定特定功能)
2.mysql_real_query
函式原型:int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)
引數說明:
query:SQL語句;
length:SQL語句長度
3.mysql_store_result
函式原型:MYSQL_RES *mysql_store_result(MYSQL *mysql)
返回值說明:具有多個結果的MYSQL_RES結果集合。如果出現錯誤,返回NULL。
4.mysql_fetch_row
函式原型:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
引數說明:具有多個結果的MYSQL_RES結果集合
返回值說明:在mysql_store_result()之後使用時,如果沒有更多的行可檢索時,mysql_fetch_row()返回NULL。
二、上示例程式碼
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "mysql.h" int main() { MYSQL conn; int res; MYSQL_RES * result; MYSQL_ROW row; mysql_init(&conn); if (mysql_real_connect(&conn, "***.***.***.***", "usre_name", "password", "DataBase_name", port, NULL, 0)) { printf("coneect mysql successful\n請選擇功能:\n"); int choose; char str1[20], str2[20]; char insert_query[80]; char delete_query[50] = "delete from age where name='"; char select_query[] = "select * from age"; printf("1.insert\n2.select\n3.delete\n"); while (scanf("%d", &choose)) { switch (choose) { case 1: printf("姓名 年齡:\n"); memset(insert_query, 0, sizeof(insert_query)); //insert scanf("%s %s", str1, str2); strcat(insert_query, "insert into age values('"); strcat(insert_query, str1); strcat(insert_query, "',"); strcat(insert_query, str2); strcat(insert_query, ")"); printf("SQL語句: %s\n", insert_query); res = mysql_query(&conn, insert_query); if (!res) { printf("insert %lu rows\n", (unsigned long)mysql_affected_rows(&conn)); } else { printf("insert error\n"); } break; case 2: //select printf("SQL語句: %s\n", select_query); if (mysql_query(&conn, select_query) != 0) { fprintf(stderr, "查詢失敗!\n"); exit(1); } else { if ((result = mysql_store_result(&conn)) == NULL) { fprintf(stderr, "儲存結果集失敗!\n"); exit(1); } else { while ((row = mysql_fetch_row(result)) != NULL) { printf("name is %s , ", row[0]); printf("age is %s\n", row[1]); } } } break; case 3: printf("姓名:\n"); scanf("%s", str1); strcat(delete_query, str1); strcat(delete_query, "'"); //delete printf("SQL語句: %s\n", delete_query); res = mysql_real_query(&conn, delete_query, (unsigned int)strlen(delete_query)); if (!res) { printf("delete successful\n"); } else { printf("delete error\n"); } break; } } mysql_close(&conn); } return 0; }
三、結果截圖
四、注意點
由於MySQL所用的標頭檔案不是C語音標準庫,所以一定要加上外部庫,不然編譯不過。
找不到庫的,要先安裝libmysqlclient-dev(整套流程教程傳送門:https://www.cnblogs.com/zhuyp1015/p/3561470.html)