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 編譯與運行
4.1 獲取編譯依賴信息
[root@localhost /]# mysql_config --cflags
-I/usr/local/mysql/include -fPIC -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DMY_PTHREAD_FASTMUTEX=1
[root@localhost /]# mysql_config --libs
-L/usr/local/mysql/lib -lmysqlclient -lpthread -lm -lrt -ldl
mysql_config --cflags 編譯器標誌,用於查找包含文件,以及編譯libmysqlclient庫時所要使用的關鍵編譯器標誌和定義。mysql_config --libs 與MySQL客戶端庫進行鏈接所需的庫和選項。
4.2 編譯源文件
[root@localhost /]# gcc -o MysqlCTest MysqlCTest.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlclient
4.3 執行編譯好的文件[root@localhost /]# ./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
****************************************************************************************