1. 程式人生 > >C語言訪問MySQL資料庫

C語言訪問MySQL資料庫

從網上得到的一個已有程式,經過簡單修改和除錯滿足了自己變成的需求,記錄一下。。。謝謝前輩們的分享,讓我們可以站在巨人的肩膀上學習,進步!!

#include
#include
#include
#include
#include "mysql.h"
#pragma comment(lib,"libmysql")


#define HOST "localhost"
#define USERNAME "root"
#define PASSWORD "123456"
#define DATABASE "ipinfo"


void exe_sql(char* sql) {
MYSQL my_connection;
int res;


mysql_init(&my_connection);


if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {

printf("資料庫執行exe_sql連線成功!\n");

mysql_query(&my_connection,"set names gb2312");

res = mysql_query(&my_connection,sql);
if (res) {

printf("Error: mysql_query !\n");

mysql_close(&my_connection);
} else {


printf("%d 行受到影響!\n",mysql_affected_rows(&my_connection));

mysql_close(&my_connection);
}
} else {

printf("資料庫執行exe_sql連線失敗!\n");
}
}



void query_sql(char* sql) {
MYSQL my_connection;
int res;
MYSQL_RES *res_ptr;
MYSQL_FIELD *field;
MYSQL_ROW result_row;
int row, column;
int i, j;

mysql_init(&my_connection);

if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {

printf("資料庫查詢query_sql連線成功!\n");

mysql_query(&my_connection,"set names gb2312"); //utf8應該是可以的,此程式為何不可以,有待認證

res = mysql_query(&my_connection, sql);
if (res) {

printf("Error: mysql_query !\n");

mysql_close(&my_connection);
} else {

res_ptr = mysql_store_result(&my_connection);

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("%s\t", field->name);
printf("\n");

for (i = 1; i < row; i++) {
result_row = mysql_fetch_row(res_ptr);
for (j = 0; j < column; j++)
printf("%s\t", result_row[j]);
printf("\n");
}
}

mysql_close(&my_connection);
}
}
}
int main(int argc, char *argv[]) {

char *query;
char *exe = "insert into ipinfo values(0,'192.168.5.4','192.168.5.7','測試資訊');"; //序號為零時,編號顯示為自動在當前序號加1;如果指定非零的正整數序號,則顯示所指定序號
exe_sql(exe);

query="select * from ipinfo;";
query_sql(query);
return 0;
}



除錯中遇到的問題:

1、缺少資料庫連線檔案;

新增所需的資料連線檔案,如下圖:


2、中文資料顯示為亂碼;

設定編碼方式:mysql_query(&my_connection,"set names gb2312"); (此處,utf8編碼格式應該是可以的,此程式為何不可以,有待認證)

3、插入資訊錯誤;

當時資料的格式和插入資訊的數不完善,缺少編號列,所以出現錯誤。

(在顯示資訊時,感覺資料有點亂,其實是按一定的格式設定的,我了之後與MySQL資料庫的後續操作)