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、缺少資料庫連線檔案;
新增所需的資料連線檔案,如下圖:
設定編碼方式:mysql_query(&my_connection,"set names gb2312"); (此處,utf8編碼格式應該是可以的,此程式為何不可以,有待認證)
3、插入資訊錯誤;
當時資料的格式和插入資訊的數不完善,缺少編號列,所以出現錯誤。
(在顯示資訊時,感覺資料有點亂,其實是按一定的格式設定的,我了之後與MySQL資料庫的後續操作)