c語(yǔ)言連接mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
更新時(shí)間:2012年05月05日 00:59:00 投稿:mdxy-dxy
C語(yǔ)言連接mysql數(shù)據(jù)庫(kù),需要相應(yīng)的頭文件和lib文件,如果你安裝Mysql數(shù)據(jù)庫(kù),會(huì)在安裝目錄下找到這些庫(kù)文件,如果沒有安裝,也可以在網(wǎng)上找到
我這里也有一份網(wǎng)上找到的:/201205/other/C_link_mySql51.rar
C連接MySql5.1所需文件.rar
附帶一個(gè)不錯(cuò)的例子:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>
#include <mysql/mysql.h>/*注意要包含這個(gè)頭文件*/
#pragma comment(lib,"libmysql")
/*定義了一些數(shù)據(jù)庫(kù)連接需要的宏*/
#define HOST "localhost"
#define USERNAME "root"
#define PASSWORD "123456"
#define DATABASE "test"
/*這個(gè)函數(shù)用來(lái)執(zhí)行傳入的sql語(yǔ)句*/
void exe_sql(char* sql) {
MYSQL my_connection; /*這是一個(gè)數(shù)據(jù)庫(kù)連接*/
int res; /*執(zhí)行sql語(yǔ)句后的返回標(biāo)志*/
/*初始化mysql連接my_connection*/
mysql_init(&my_connection);
/*這里就是用了mysql.h里的一個(gè)函數(shù),用我們之前定義的那些宏建立mysql連接,并
返回一個(gè)值,返回不為空證明連接是成功的*/
if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {/*連接成功*/
printf("數(shù)據(jù)庫(kù)執(zhí)行exe_sql連接成功!n");
/*這句話是設(shè)置查詢編碼為utf8,這樣支持中文*/
mysql_query(&my_connection, "set names utf8");
/*下面這句話就是用mysql_query函數(shù)來(lái)執(zhí)行我們剛剛傳入的sql語(yǔ)句,
這會(huì)返回一個(gè)int值,如果為0,證明語(yǔ)句執(zhí)行成功*/
res = mysql_query(&my_connection, sql);
if (res) {/*現(xiàn)在就代表執(zhí)行失敗了*/
printf("Error: mysql_query !\n");
/*不要忘了關(guān)閉連接*/
mysql_close(&my_connection);
} else {/*現(xiàn)在就代表執(zhí)行成功了*/
/*mysql_affected_rows會(huì)返回執(zhí)行sql后影響的行數(shù)*/
printf("%d 行受到影響!\n",
mysql_affected_rows(&my_connection));
/*不要忘了關(guān)閉連接*/
mysql_close(&my_connection);
}
} else {
/*數(shù)據(jù)庫(kù)連接失敗*/
printf("數(shù)據(jù)庫(kù)執(zhí)行exe_sql連接失??!\n");
}
}
/*這個(gè)函數(shù)用來(lái)執(zhí)行傳入的sql語(yǔ)句,并打印出查詢結(jié)果*/
void query_sql(char* sql) {
MYSQL my_connection; /*這是一個(gè)數(shù)據(jù)庫(kù)連接*/
int res; /*執(zhí)行sql語(yǔ)句后的返回標(biāo)志*/
MYSQL_RES *res_ptr; /*指向查詢結(jié)果的指針*/
MYSQL_FIELD *field; /*字段結(jié)構(gòu)指針*/
MYSQL_ROW result_row; /*按行返回的查詢信息*/
int row, column; /*查詢返回的行數(shù)和列數(shù)*/
int i, j; /*只是控制循環(huán)的兩個(gè)變量*/
/*初始化mysql連接my_connection*/
mysql_init(&my_connection);
/*這里就是用了mysql.h里的一個(gè)函數(shù),用我們之前定義的那些宏建立mysql連接,并
返回一個(gè)值,返回不為空證明連接是成功的*/
if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {/*連接成功*/
printf("數(shù)據(jù)庫(kù)查詢query_sql連接成功!\n");
/*這句話是設(shè)置查詢編碼為utf8,這樣支持中文*/
mysql_query(&my_connection, "set names utf8");
*下面這句話就是用mysql_query函數(shù)來(lái)執(zhí)行我們剛剛傳入的sql語(yǔ)句,
這會(huì)返回一個(gè)int值,如果為0,證明語(yǔ)句執(zhí)行成功*/
res = mysql_query(&my_connection, sql);
if (res) { /*現(xiàn)在就代表執(zhí)行失敗了*/
printf("Error: mysql_query !\n");
/*不要忘了關(guān)閉連接*/
mysql_close(&my_connection);
} else { /*現(xiàn)在就代表執(zhí)行成功了*/
/*將查詢的結(jié)果給res_ptr*/
res_ptr = mysql_store_result(&my_connection);
/*如果結(jié)果不為空,就把結(jié)果print*/
if (res_ptr) {
/*取得結(jié)果的行數(shù)和*/
column = mysql_num_fields(res_ptr);
row = mysql_num_rows(res_ptr) + 1;
printf("查詢到 %lu 行 \n", row);
/*輸出結(jié)果的字段名*/
for (i = 0; field = mysql_fetch_field(res_ptr); i++)
printf("%st", field->name);
printf("\n");
/*按行輸出結(jié)果*/
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");
}
}
/*不要忘了關(guān)閉連接*/
mysql_close(&my_connection);
}
}
}
int main(int argc, char *argv[]) {
/*測(cè)試下向里面插入數(shù)據(jù)*/
char *query;
char *exe = "insert into student values('lala','hahhahah!');";
exe_sql(exe);
*測(cè)試下查詢*/
query="select * from student;";
query_sql(query);
return 0;
}
相關(guān)文章
C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)源碼
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C語(yǔ)言結(jié)構(gòu)體版學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言結(jié)構(gòu)體版的學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
C++實(shí)現(xiàn)LeetCode(174.地牢游戲)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(174.地牢游戲),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

