1. 程式人生 > >用C語言操作MySQL資料庫,進行連線、插入、修改、刪除等操作

用C語言操作MySQL資料庫,進行連線、插入、修改、刪除等操作

  很多人用到MySQL來開發一些專案,有時為了效能,我們會直接用C語言來開發相關的模組,尤其在我們的web應用中,雖然PHP、JSP等指令碼均提供了MySQL的介面,但是顯然直接使用C語言具有更好的安全性和效能,Michael以前用PHP開發的多個專案中就使用了C語言編寫的這類介面,然後再編譯到php裡面,供php指令碼直接使用,這方面的話題就不多說了,下面主要說一下在Linux下如何用C語言連線MySQL資料庫,並且讀取裡面的資料返回,同時如何進行編譯。

  這裡的大部分程式碼參考了MySQL發行包裡面的.c原始檔,大家也可以去裡面找找相關的程式碼,下面這段程式碼實現了連線到本地MySQL伺服器上9tmd_bbs_utf8資料庫,從資料表tbb_user中根據輸入的userid取得該使用者的使用者名稱並列印輸出到終端。

#ifdefined(_WIN32) || defined(_WIN64)//為了支援windows平臺上的編譯#include <windows.h>#endif#include <stdio.h>#include <stdlib.h>#include "mysql.h"  //我的機器上該檔案在/usr/local/include/mysql下//定義資料庫操作的巨集,也可以不定義留著後面直接寫進程式碼#defineSELECT_QUERY"select username from tbb_user where userid = %d"intmain(intargc,
char **argv)//char **argv 相當於 char *argv[]
{MYSQLmysql,*sock;    //定義資料庫連線的控制代碼,它被用於幾乎所有的MySQL函式MYSQL_RES *res;       //查詢結果集,結構型別MYSQL_FIELD *fd ;     //包含欄位資訊的結構MYSQL_ROWrow ;       //存放一行查詢結果的字串陣列charqbuf[160];      //存放查詢sql語句字串if(argc != 2){//檢查輸入引數fprintf(stderr,"usage : mysql_select <userid>/n/n");
        
exit(1)
;
    
}
mysql_init(&mysql);
    
if(!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))){
fprintf(stderr,"Couldn't connect to engine!/n%s/n/n",mysql_error(&mysql));
        
perror("")
;
        
exit(1)
;
    
}
sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));
    
if(mysql_query(sock,qbuf)){
fprintf(stderr,"Query failed (%s)/n",mysql_error(sock));
        
exit(1)
;
    
}
if(!(res=mysql_store_result(sock))){fprintf(stderr,"Couldn't get result from %s/n", mysql_error(sock));
        
exit(1)
;
    
}
printf("number of fields returned: %d/n",mysql_num_fields(res));
        
    
while(row = mysql_fetch_row(res)){
printf("Ther userid #%d 's username is: %s/n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ;
        
puts("query ok !/n")
;
    
}
mysql_free_result(res);
    
mysql_close(sock)
;
    
exit(0)
;
    
return0;   //. 為了相容大部分的編譯器加入此行
}

編譯的時候,使用下面的命令

gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 後面兩個選項可選,根據您的環境情況

執行的時候,執行下面的命令

./mysql_select 1

將返回如下結果:

number of fields returned: 1
Ther userid #1 's username is: Michael
query ok !

上面的程式碼我想大部分都能看明白,不明白的可以參考一下MySQL提供的有關C語言API部分文件,各個函式都有詳細說明,有時間我整理一份常用的API說明出來。