用C語言操做MySQL數據庫,進行鏈接、插入、修改、刪除等操做

C/C++ codephp

 

?mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#if defined(_WIN32) || defined(_WIN64)  //爲了支持windows平臺上的編譯
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"  //個人機器上該文件在/usr/local/include/mysql下
  
//定義數據庫操做的宏,也能夠不定義留着後面直接寫進代碼
#define SELECT_QUERY "select username from tbb_user where userid = %d"
  
int  main( int  argc,  char  **argv)  //char **argv 至關於 char *argv[]
{
     MYSQL mysql,*sock;     //定義數據庫鏈接的句柄,它被用於幾乎全部的MySQL函數
     MYSQL_RES *res;        //查詢結果集,結構類型
     MYSQL_FIELD *fd ;      //包含字段信息的結構
     MYSQL_ROW row ;        //存放一行查詢結果的字符串數組
     char   qbuf[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);
     return  0;    //. 爲了兼容大部分的編譯器加入此行
}

 

不少人用到MySQL來開發一些項目,有時爲了性能,咱們會直接用C語言來開發相關的模塊,尤爲在咱們的web應用中,雖然PHP、JSP等腳本均提供了MySQL的接口,可是顯然直接使用C語言具備更好的安全性和性能,Michael之前用PHP開發的多個項目中就使用了C語言編寫的這類接口,而後再編譯到php裏面,供php腳本直接使用,這方面的話題就很少說了,下面主要說一下在Linux下如何用C語言鏈接MySQL數據庫,而且讀取裏面的數據返回,同時如何進行編譯。web

  這裏的大部分代碼參考了MySQL發行包裏面的.c源文件,你們也能夠去裏面找找相關的代碼,下面這段代碼實現了鏈接到本地MySQL服務器上9tmd_bbs_utf8數據庫,從數據表tbb_user中根據輸入的userid取得該用戶的用戶名並打印輸出到終端。sql

#if defined(_WIN32) || defined(_WIN64)  //爲了支持windows平臺上的編譯
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"  //個人機器上該文件在/usr/local/include/mysql下
 
//定義數據庫操做的宏,也能夠不定義留着後面直接寫進代碼
#define SELECT_QUERY "select username from tbb_user where userid = %d"
 
int main(int argc, char **argv) //char **argv 至關於 char *argv[]
{
    MYSQL mysql,*sock;    //定義數據庫鏈接的句柄,它被用於幾乎全部的MySQL函數
    MYSQL_RES *res;       //查詢結果集,結構類型
    MYSQL_FIELD *fd ;     //包含字段信息的結構
    MYSQL_ROW row ;       //存放一行查詢結果的字符串數組
    char  qbuf[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);
    return 0;   //. 爲了兼容大部分的編譯器加入此行
}
編譯的時候,使用下面的命令
 gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 後面兩個選項可選,根據您的環境狀況

運行的時候,執行下面的命令數據庫

 ./mysql_select 1

將返回以下結果:windows

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

上面的代碼我想大部分都能看明白,不明白的能夠參考一下MySQL提供的有關C語言API部分文檔,各個函數都有詳細說明,有時間我整理一份經常使用的API說明出來。數組

相關文章
相關標籤/搜索