c語言串連mysql資料庫的實現方法
來源:互聯網
上載者:User
我這裡也有一份網上找到的:/201205/other/C_link_mySql51.rar
C串連MySql5.1所需檔案.rar
附帶一個不錯的例子:
複製代碼 代碼如下:#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>
#include <mysql/mysql.h>/*注意要包含這個標頭檔*/
#pragma comment(lib,"libmysql")
/*定義了一些資料庫連接需要的宏*/
#define HOST "localhost"
#define USERNAME "root"
#define PASSWORD "123456"
#define DATABASE "test"
/*這個函數用來執行傳入的sql語句*/
void exe_sql(char* sql) {
MYSQL my_connection; /*這是一個資料庫連接*/
int res; /*執行sql語句後的返回標誌*/
/*初始化mysql串連my_connection*/
mysql_init(&my_connection);
/*這裡就是用了mysql.h裡的一個函數,用我們之前定義的那些宏建立mysql串連,並
返回一個值,返回不為空白證明串連是成功的*/
if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {/*串連成功*/
printf("資料庫執行exe_sql串連成功!n");
/*這句話是設定查詢編碼為utf8,這樣支援中文*/
mysql_query(&my_connection, "set names utf8");
/*下面這句話就是用mysql_query函數來執行我們剛剛傳入的sql語句,
這會返回一個int值,如果為0,證明語句執行成功*/
res = mysql_query(&my_connection, sql);
if (res) {/*現在就代表執行失敗了*/
printf("Error: mysql_query !\n");
/*不要忘了關閉串連*/
mysql_close(&my_connection);
} else {/*現在就代表執行成功了*/
/*mysql_affected_rows會返回執行sql後影響的行數*/
printf("%d 行受到影響!\n",
mysql_affected_rows(&my_connection));
/*不要忘了關閉串連*/
mysql_close(&my_connection);
}
} else {
/*資料庫連接失敗*/
printf("資料庫執行exe_sql串連失敗!\n");
}
}
/*這個函數用來執行傳入的sql語句,並列印出查詢結果*/
void query_sql(char* sql) {
MYSQL my_connection; /*這是一個資料庫連接*/
int res; /*執行sql語句後的返回標誌*/
MYSQL_RES *res_ptr; /*指向查詢結果的指標*/
MYSQL_FIELD *field; /*欄位結構指標*/
MYSQL_ROW result_row; /*按行返回的查詢資訊*/
int row, column; /*查詢返回的行數和列數*/
int i, j; /*只是控制迴圈的兩個變數*/
/*初始化mysql串連my_connection*/
mysql_init(&my_connection);
/*這裡就是用了mysql.h裡的一個函數,用我們之前定義的那些宏建立mysql串連,並
返回一個值,返回不為空白證明串連是成功的*/
if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {/*串連成功*/
printf("資料庫查詢query_sql串連成功!\n");
/*這句話是設定查詢編碼為utf8,這樣支援中文*/
mysql_query(&my_connection, "set names utf8");
*下面這句話就是用mysql_query函數來執行我們剛剛傳入的sql語句,
這會返回一個int值,如果為0,證明語句執行成功*/
res = mysql_query(&my_connection, sql);
if (res) { /*現在就代表執行失敗了*/
printf("Error: mysql_query !\n");
/*不要忘了關閉串連*/
mysql_close(&my_connection);
} else { /*現在就代表執行成功了*/
/*將查詢的結果給res_ptr*/
res_ptr = mysql_store_result(&my_connection);
/*如果結果不為空白,就把結果print*/
if (res_ptr) {
/*取得結果的行數和*/
column = mysql_num_fields(res_ptr);
row = mysql_num_rows(res_ptr) + 1;
printf("查詢到 %lu 行 \n", row);
/*輸出結果的欄位名*/
for (i = 0; field = mysql_fetch_field(res_ptr); i++)
printf("%st", field->name);
printf("\n");
/*按行輸出結果*/
for (i = 1; i < row; i++) {
result_row = mysql_fetch_row(res_ptr);
for (j = 0; j < column; j++)
printf("%st", result_row[j]);
printf("\n");
}
}
/*不要忘了關閉串連*/
mysql_close(&my_connection);
}
}
}
int main(int argc, char *argv[]) {
/*測試下向裡面插入資料*/
char *query;
char *exe = "insert into student values('lala','hahhahah!');";
exe_sql(exe);
*測試下查詢*/
query="select * from student;";
query_sql(query);
return 0;
}