1. 程式人生 > >編寫Linux下用C語言訪問MySQL資料庫的程式

編寫Linux下用C語言訪問MySQL資料庫的程式

  在編寫這個程式的時候我和同學費了很大的力氣特別是在編譯的時候,下面我就把自己編譯的經驗給大家分享一下,希望大家能少走一些彎路。
    我自己裝了mysql-5.0.41-linux-i686-glibc23.tar.gz 安裝部分就不說了!自己在網上查吧!我的安裝目錄是 /usr/local/mysql 在這裡說安裝的目錄是因為我們程式設計的時候要用到裡面的標頭檔案和庫,標頭檔案的目錄就是在/usr/local/mysql/include/ ,庫檔案在 /usr/local/mysql/lib/ 這裡我們主要用一個libmysqlclietn.a / libmysqlclient.so的庫,因為程式的編譯要用到一個引數 -lmysqlclient 就是要呼叫這個庫.好了!下面我來給大家說一下,在Linux下用C語言和MySQL的庫怎麼實現對資料庫的操作,

/* 在程式開始之前我為了以後方便編譯程式 我把/usr/local/mysql目錄中的一些檔案拷入了系統預設目錄   */
/* 比如我做了如下的拷貝 */
/* 注意的所有操作包括程式在內都用藍色字型標註,本程式我一測試成功

*/

/*
   mkdir /usr/include/mysql 這條命 令在/usr/include下建立了一個mysql目錄
   cp /usr/local/mysql/include/* /usr/include/mysql/ 把mysql安裝目錄下的include資料夾下的檔案都拷到/usr/include /mysql   這樣就可以在程式設計的時候直接在標頭檔案引用時 寫上 # include <mysql/mysql.h>而不是 # include "/usr/local/mysql/include/mysql.h" 希望大家分清楚,我是在已經把標頭檔案拷入到/usr/include/mysql/裡才寫了下面的標頭檔案包含的
   cp /usr/local/mysql/lib/* /usr/lib/  
       這是把MySQL的開發庫放到系統預設的庫檔案目錄了這樣系統找的時候就容易多了!    
*/

# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <mysql/mysql.h>



int main(int argc ,char *argv[])
{
   MYSQL *m_sql; /* 定義SQL描述符 */
int m_query=0;


   //char command[80]="select * from girls"; /* 定義執行的SQL語句 假設我的test資料庫裡有個girls的表 */
   char command[80]=""; /* 這個資料儲存要輸入的SQL語句 */

   printf("Please input You MySQL Command!/n");
   scanf("%s",command); /* 輸入要執行的SQL語句 */
   m_sql = (MYSQL*)malloc(sizeof(MYSQL)); /* 為SQL描述符分配空間 */
  
   mysql_init(m_sql); /* 初始化SQL描述符 這很重要 */
  
   mysql_options(m_sql,MYSQL_READ_DEFAULT_GROUP,"mysql"); /* 從my.cnf檔案讀取mysql配置項作為當前配置 但是我發現有人也不用寫這個函式也可以執行下去 所以建議大家在自己各自的機器上試試看 */
  
   /* 用指定使用者和密碼連線本地SQL伺服器的指定資料庫 埠預設 */  
if(!mysql_real_connect(m_sql,"localhost","root","123456","test",0,NULL,0))
    {
       printf("Connect MySQL ERROR!/n");
       exit(1);
    }


   printf("Connect MySQL Success!/n");

   mysql_select_db(m_sql,"test"); /* 設定連線資料庫為test 這個函式也可以不用寫,因為之前我們在mysql_real_connect()函式中已經指定了資料庫*/
  
   m_query=mysql_query(m_sql,command); /* 在伺服器上執行定義的SQL語句 這個函式是我一直比較鬱悶的函式,因為我和同學一起做的,我用mysql_real_query()函式總是出錯,但他的就沒有錯 還是根據自己系統的情況 自己斟酌吧 */
  

   /* 執行命令失敗就退出 */
   if (m_query)
    {
    printf(" %d Function /" mysql_real_query /" is ERROR!/n",m_query);
    exit(1);
    }


   mysql_close(m_sql); /* 關閉SQL描述符 為程式退出做準備 */
   return 0;
}

下面我們開始編譯了,步驟是這樣的:先把原始檔編譯成目標檔案 即 *.o 的檔案,然後再把 *.o 的檔案編譯成可執行的 *.out 檔案:我的命令是這樣的 我的原始檔名 是mysql.c
編譯 :gcc -c mysql.c -I /usr/include/mysql/ 這裡的-I 是指定標頭檔案目錄 -c 是編譯成目的碼
連線 :gcc mysql.o -o mysql -L /usr/lib/ -lmysqlclient -lz 這裡的-L是指定庫檔案路徑 這個引數-lmysqlclient是因為 C API程式碼包含在mysqlclient庫中,正因為有了它才允許C程式訪問資料庫。-lz 我暫時不知道什麼意思,請高手指教

轉自http://hi.baidu.com/156544632/blog/item/98ba33636e7550670d33fa68.html