怎樣用c/c++編程串連mysql資料庫?

來源:互聯網
上載者:User

http://www.mysql.com/doc/en/C.html  
   
  [轉貼自http://homepage.qdcatv.com.cn/antonio/mysql/mysql.htm]  
   
  執行一個查詢有以下幾個步驟要做。首先執行一個查詢,然後儲存結果,  
  得到的是一個子集。這裡是一個小例子:  
   
  #include    
  #include    
  #include   "mysql.h"  
   
  MYSQL   mysql;  
  MYSQL_RES   *res;  
  MYSQL_ROW   row;  
   
  void   exiterr(int   exitcode)  
  {  
  fprintf(   stderr,   "%s\n",   mysql_error(&mysql)   );  
  exit(   exitcode   );  
  }  
   
  int   main()  
  {  
  uint   i   =   0;  
   
  if   (!(mysql_connect(&mysql,"host","username","password")))    
  exiterr(1);  
   
  if   (mysql_select_db(&mysql,"payroll"))  
  exiterr(2);  
   
  if   (mysql_query(&mysql,"SELECT   name,rate   FROM   emp_master"))  
  exiterr(3);  
   
  if   (!(res   =   mysql_store_result(&mysql)))  
  exiterr(4);  
   
  while((row   =   mysql_fetch_row(res)))   {  
  for   (i=0   ;   i   <   mysql_num_fields(res);   i++)    
  printf("%s\n",row[i]);  
  }  
   
  mysql_free_result(res);  
  mysql_close(&mysql);  
  }  
   
   
  mysql_query   函數將把查詢送給伺服器,如果查詢成功,調用mysql_store_result  
  函數將分配一個MYSQL_RES   結構並且重新從伺服器獲得一個結果集。你可以用    
  mysql_fetch_row   函數來查看資料。這樣做你將獲得一個   MYSQL_ROW   指標指向數  
  據中的一行。   MYSQL_ROW   指標是一簡單的字串數組。所有的資料類型被轉換成  
  字串送到用戶端。  
     
   
  mysql_num_fields   函數將告訴你返回的列數。你可以繼續調用   mysql_fetch_row  
  直到它返回一個null 指標以得到查詢中的每一行。  
   
  注意在這個例子裡,我們沒有檢查有null 指標的列。如果你不使用非空列的表,那麼  
  你必須檢查一個特殊行的列是否為空白。  
   
  一旦你使用完畢一個結果集,你必須釋放它。這通過   mysql_free_result   來完成。  
   
  最後調用   mysql_close   來關閉你和資料庫之間的串連。  
   
  查看結果集  
   
  你可以不用調用   mysql_fetch_row   就查出返回的結果集共有多少行。這由  
  int   mysql_num_rows(MYSQL_RES   *result)來完成。  
  改變到被下一個   mysql_fetch_row   調用返回的行,你可以用    
  void   mysql_data_seek(MYSQL_RES   *res,   uint   offset)   改變到任意一行。  
   
  獲得更多的資訊  
   
  你可以使用這幾個額外的函數來找出關於一個查詢的更多的資訊,並從伺服器獲得  
  這些資訊。  
  如果你執行一個UPDATE,   INSERT   或者   DELETE   查詢,你可以用    
  int   mysql_affected_rows   來查出共有多少行資料被你影響到。  
  如果在你的資料庫裡有位元據,那麼得知資料的長度將是有用的。unsigned    
  int   *mysql_fetch_lengths(MYSQL_RES   *mysql)   將返回一指出了結果集中每一列  
  的長度的整型數組。  
   
  當你插入一個帶有   AUTO_INCREMENT   列的表的時候,你可以用    
  int   mysql_insert_id(MYSQL   *mysql)   來查出產生的那一行的ID。  
======================

我連過成功了!  
   
  #include   "/include/mysql/mysql.h"   /*為絕對路徑*/    
  #include   <stdio.h>    
   
  int   main(int   argc,char   *argv[])    
  {    
  char   *user   =   "root",   *pwd   =   "mysql",   *dbname   =   "mysql";    
  MYSQL   mysql;    
  MYSQL_RES   *mysql_ret;    
  MYSQL_ROW   mysql_row;    
  unsigned   long   num_rows;    
  int   ret;    
   
  mysql_init(&mysql);    
   
  if(mysql_real_connect(&mysql,NULL,user,pwd,dbname,0,NULL,0))    
  {    
  printf("Connection   success!\n");    
  ret   =   mysql_query(&mysql,"select   *   from   user");    
  if(!ret)    
  {    
  printf("Query   Success!\n");    
  mysql_ret   =   mysql_store_result(&mysql);    
  if(mysql_ret   !=   NULL)    
  {    
  printf("Store   Result   Success!\n");    
  num_rows   =   mysql_num_rows(mysql_ret);    
  if(num_rows   !=   0)    
  {    
  printf("%d\n",num_rows);    
  while(mysql_row   =   mysql_fetch_row(mysql_ret))    
  {    
  printf("%s\t%s\t%s\t%s\t%s\t%s\n",mysql_row[0],mysql_row[1],mysql_row[2],mysql_row[3],mysql_row[4],mysql_row[5]);    
  }    
  }    
  else    
  {    
  printf("mysql_num_rows   Failed!\n");    
  exit(-1);    
  }    
  mysql_free_result(mysql_ret);    
  exit(0);    
  }    
  else    
  {    
  printf("Store   Result   Failed!\n");    
  exit(-1);    
  }    
  }    
  else    
  {    
  printf("Query   Failed!\n");    
  exit(-1);    
  }    
  }    
  else    
  {    
  printf("Connection   Failed\n");    
  exit(-1);    
  }    
  }    
  如果你包含了正確的標頭檔而在串連的時候,   告訴你沒有符號串連    
  你應該串連你需要的庫    
   
  我的/lib/mysql/libmysqlclient.so下面    
  gcc   -L/lib/mysql   -lmysqlclient   -o   tes   tes.c   進行編譯  
   
   
  RedHat_shu@hotmail.com

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.