1.安裝mysql-server,在Ubuntu 10.04下安裝mysql-server-5.1,會自動安裝mysql-client_5.1
sudo apt-get install mysql-server-5.1
2.C APIs包含在mysqlclient庫文件中與MySQL的源代碼一塊發行,用於連接到數據庫和執行數據庫查詢,因此需要安裝libmysqlclient-dev
sudo apt-get install libmysqlclient-dev
假定已安裝成功,相關文件如下:
頭文件在/usr/include/mysql目錄下;
庫文件在/usr/lib/mysql和/usr/lib目錄下
注意:mac,需要再安裝mysql-connector-c,同時具體的庫要鏈接到/usr/lib下:例如
sudo ln -s /usr/local/Cellar/mysql-connector-c/6.1.6/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
3. 編譯:
gcc testdb.c -o test -I /usr/include/mysql -L /usr/lib -lmysqlclient
MYSQL *mysql_init(MYSQL *);
//這裏稱之爲載入函數吧,返回的MYSQL指針要用到後續的函數中
int mysql_options(MYSQL *connection, enum option_to_set,const char *argument);
//設置MYSQL*的一些屬性,比如超時時間等
MYSQL *mysql_real_connect(MYSQL *connection,
const char *server_host,
const char *sql_user_name,
const char *sql_password,
const char *db_name,
unsigned int port_number,//置0連接默認端口,一般爲3306
const char *unix_socket_name,//NULL
unsigned int flags);//無另外屬性時置0
//連接函數
void mysql_close(MYSQL *connection);
//關閉連接
unsigned int mysql_errno(MYSQL *connection);
//返回錯誤代碼
char *mysql_error(MYSQL *connection);
//返回錯誤信息
int mysql_query(MYSQL *connection, const char *query);
//執行sql語句
my_ulonglong mysql_affected_rows(MYSQL *connection);
//返回執行語句過後受影響的行數,針對insert,update,delete
MYSQL_RES *mysql_store_result(MYSQL *connection);
//返回執行結果,適用於數據量較小時,會返回到客戶端保存
my_ulonglong mysql_num_rows(MYSQL_RES *result);
//返回上面函數返回結果的行數
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
//抽取一條記錄,返回NULL時表示抽取完記錄或者錯誤
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);
//調整數據位置,offset爲0時,下次調用mysql_fetch_row將返回result第一條記錄
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);
//返回當前的位置
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset);
//移動數據位置,並返回先前的位置,可以和上一個函數結合使用
void mysql_free_result(MYSQL_RES *result);
//釋放result空間
MYSQL_RES *mysql_use_result(MYSQL *connection);
//返回執行結果,適用於數據量較大時,不返回到客戶端保存
unsigned int mysql_field_count(MYSQL *connection);
//返回查詢結果中的列數(column數)
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
//獲得查詢結果中的列名等信息(表頭信息)
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql/mysql.h> int main(void) { // mysql操作符 MYSQL *mysql; // mysql結果集 MYSQL_RES *mysql_res; // mysql行操作符 MYSQL_ROW mysql_row; char sqlcmd[200]; int r, t; // 初始化 mysql = mysql_init(NULL); if (!mysql) { return EXIT_FAILURE; } printf("%s\n", "init"); // 鏈接 mysql = mysql_real_connect(mysql, "127.0.0.1", "root", "root", "test", 0, NULL, 0); if (!mysql) { return EXIT_FAILURE; } printf("%s\n", "connect"); mysql_set_character_set(mysql, "utf8"); // 執行查詢 sprintf(sqlcmd, "%s", "select id,name from user"); r = mysql_real_query(mysql, sqlcmd, strlen(sqlcmd)); if (r) { // 結束 mysql_close(mysql); return EXIT_FAILURE; } printf("%s\n", "begin to query"); mysql_res = mysql_store_result(mysql); if (!mysql_res) { // 結束 mysql_close(mysql); return EXIT_FAILURE; } while((mysql_row = mysql_fetch_row(mysql_res))) { for (t = 0; t < mysql_num_fields(mysql_res); t++) { printf("%s,", mysql_row[t]); } printf("\n"); } // 釋放 mysql_free_result(mysql_res); printf("%s\n", "query finish"); // 結束 mysql_close(mysql); return EXIT_SUCCESS; }