1. 程式人生 > >C語言連結資料庫

C語言連結資料庫

一、解釋一下函式功能和用法
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)