C語言操作mysql範例(增刪查改)
阿新 • • 發佈:2018-12-29
C程式碼的API是隨MySQL一起釋出的. 它包含在mysqlclient庫中, 可以使C程式來訪問資料庫.
MySQL原始碼包中的許多客戶端都是用C寫的. 如果你正在找使用這些C API的例子, 可以看看客戶端的寫法.你可以在MySQL原始碼包的clients目錄找到這些例子.
2 測試環境
作業系統:Red Hat Enterprise Linux Server release 6.4
mysql版本:mysql-5.5.28
3 程式設計例項
#include <stdio.h> #include "/usr/local/mysql/include/mysql.h" void printResult(MYSQL *mysql); int main() { MYSQL mysql; MYSQL_RES * result; mysql_init(&mysql); mysql_real_connect(&mysql, "127.0.0.1", "root", "jesse", NULL, 3355, NULL, 0); mysql_query(&mysql, "set names 'utf8'"); mysql_query(&mysql, "drop database if exists tmpdb"); mysql_query(&mysql, "create database tmpdb"); mysql_query(&mysql, "use tmpdb"); mysql_query(&mysql, "create table tmptab(c1 int, c2 varchar(20), c3 varchar(20))"); mysql_query(&mysql, "insert into tmptab values(101, '姓名1', 'address1'), (102, '姓名2', 'address2'), (103, '姓名3', 'address3')"); mysql_query(&mysql, "select * from tmptab"); printf("--增加資料測試--\n"); printResult(&mysql); mysql_query(&mysql, "delete from tmptab where c1 = 101"); mysql_query(&mysql, "select * from tmptab"); printf("--刪除資料測試--\n"); printResult(&mysql); mysql_query(&mysql, "update tmptab set c3 = 'address4' where c1 = 103"); mysql_query(&mysql, "select * from tmptab"); printf("--更新資料測試--\n"); printResult(&mysql); mysql_query(&mysql, "delete from tmptab"); mysql_query(&mysql, "select * from tmptab"); printf("--清空資料測試--\n"); printResult(&mysql); mysql_query(&mysql, "drop table tmptab"); mysql_query(&mysql, "drop database tmpdb"); mysql_close(&mysql); } void printResult(MYSQL *mysqlPrint)//列印結果集(此處傳入指標,而非內容) { MYSQL_RES * result; int numFields = 0; int numRows = 0; MYSQL_FIELD * field; MYSQL_ROW row; int i = 0; result = mysql_store_result(mysqlPrint);//將查詢的全部結果讀取到客戶端 numFields = mysql_num_fields(result);//統計結果集中的欄位數 numRows = mysql_num_rows(result);//統計結果集的行數 while(field = mysql_fetch_field(result))//返回結果集中的列資訊(欄位) printf("%s\t", field->name); printf("\n"); if(result) { while(row = mysql_fetch_row(result))//返回結果集中行的記錄 { for(i = 0; i < numFields; i++) { printf("%s\t", row[i]); } printf("\n"); } } mysql_free_result(result);//釋放result空間,避免記憶體洩漏 }
4.1 獲取編譯依賴資訊
[[email protected] /]# mysql_config --cflags
-I/usr/local/mysql/include -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1
[[email protected] /]# mysql_config --libs
-L/usr/local/mysql/lib -lmysqlclient -lpthread -lm -lrt -ldl
mysql_config --cflags 編譯器標誌,用於查詢包含檔案,以及編譯libmysqlclient庫時所要使用的關鍵編譯器標誌和定義。mysql_config --libs 與MySQL客戶端庫進行連結所需的庫和選項。
4.2 編譯原始檔
[[email protected] /]# gcc -o MysqlCTest MysqlCTest.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlclient
4.3 執行編譯好的檔案[[email protected] /]# ./MysqlCTest --增加資料測試-- c1 c2 c3 101 姓名1 address1 102 姓名2 address2 103 姓名3 address3 --刪除資料測試-- c1 c2 c3 102 姓名2 address2 103 姓名3 address3 --更新資料測試-- c1 c2 c3 102 姓名2 address2 103 姓名3 address4 --清空資料測試-- c1 c2 c3
5 補充知識
5.1 避免中文亂碼
為確保程式寫入資料庫以及從資料庫讀出時不出現亂碼,需要做如下配置:
c客戶端程式級別:
c程式檔案設定編碼 utf8,如
mysql_query(&mysql, "set names 'utf8'");
mysql資料庫級別:設定MySQL資料庫客戶端及服務端配置為utf8
例如:
在my.cnf配置檔案中配置
[mysql]
default_character_set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_bin
****************************************************************************************
原文地址:http://blog.csdn.net/jesseyoung/article/details/40372047
部落格主頁:http://blog.csdn.net/jesseyoung
****************************************************************************************