程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 【Linux】Ubuntu下C語言訪問MySQL數據庫入門,ubuntumysql

【Linux】Ubuntu下C語言訪問MySQL數據庫入門,ubuntumysql

編輯:關於C語言

【Linux】Ubuntu下C語言訪問MySQL數據庫入門,ubuntumysql


使用的系統是Ubuntu 11.10.數據庫是MySQL。

 

MySQL數據庫環境配置

 

首先需要安裝MySQL客戶端和服務器,命令行安裝方式為:

 

[cpp] view plaincopyprint?  
  1. sudo apt-get install mysql-server mysql-client  


然後,要使用C語言編程訪問數據庫,需要另外安裝一個開發包:

 

 

[cpp] view plaincopyprint?  
  1. sudo apt-get install libmysqlclient15-dev  

 

 

在MySQL中建立相應數據庫

首先以用戶rick登錄MySQL數據庫(用戶rick已經被root權限用戶賦予了創建數據庫等等的權限):

然後創建一個名為foo的數據庫:

 

[cpp] view plaincopyprint?  
  1. CREATE DATABASE foo;  

然後利用如下SQL語句創建表及插入數據:

 

 

[cpp] view plaincopyprint?  
  1. CREATE TABLE children(  
  2.     childno int(11) NOT NULL auto_increment,  
  3.     fname varchar(30),  
  4.     age int(11),  
  5.     PRIMARY KEY (childno)  
  6.     );  
  7.   
  8. INSERT INTO children(childno,fname,age) VALUES(1,'Jenny',21);  
  9. INSERT INTO children(childno,fname,age) VALUES(2,'Andrew',17);  
  10. INSERT INTO children(childno,fname,age) VALUES(3,'Gavin',8);  
  11. INSERT INTO children(childno,fname,age) VALUES(4,'Duncan',6);  
  12. INSERT INTO children(childno,fname,age) VALUES(5,'Emma',4);  
  13. INSERT INTO children(childno,fname,age) VALUES(6,'Alex',15);  
  14. INSERT INTO children(childno,fname,age) VALUES(7,'Adrian',9);  


在MySQL命令行模式中執行方法如下:

 

 

MySQL數據庫連接測試

 

然後采用如下C語言進行數據庫連接測試connect1.c:

 

[cpp] view plaincopyprint?  
  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include "mysql.h"  
  5.   
  6. int main(int argc,char *argv[])  
  7. {  
  8.   MYSQL *conn_ptr;  
  9.   conn_ptr = mysql_init(NULL);  
  10.   
  11.   if(!conn_ptr)  
  12.   {  
  13.     fprintf(stderr,"mysql_init failed\n");  
  14.     return EXIT_FAILURE;  
  15.   }  
  16.   
  17.   conn_ptr = mysql_real_connect(conn_ptr,"localhost","rick","rick","foo",0,NULL,0);  
  18.   
  19.   if(conn_ptr)  
  20.     printf("Connection success\n");  
  21.   else  
  22.     printf("Connection failed\n");  
  23.   
  24.   mysql_close(conn_ptr);  
  25.   
  26.   return EXIT_SUCCESS;  
  27. }  

執行結果:

 

注意的是:需要指定include庫和庫文件的路徑名,以及指定鏈接的庫模塊mysqlclient。

如果不在開始的時候安裝開發包,就會產生如下錯誤:

 

執行SQL語句進行數據操作

向數據庫表children中插入一行:

 

[cpp] view plaincopyprint?  
  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include "mysql.h"  
  5.   
  6. int main()  
  7. {  
  8.   MYSQL my_connecyion;  
  9.   int res;  
  10.   
  11.   mysql_init(&my_connecyion);  
  12.   
  13.   if(mysql_real_connect(&my_connecyion,"localhost","rick","rick","foo",0,NULL,0))  
  14.   {  
  15.     printf("Connection success\n");  
  16.   
  17.     //執行SQL語句  
  18.     res = mysql_query(&my_connecyion,"INSERT INTO children(fname,age) VALUES('Ann',3)");  
  19.   
  20.     if(!res)  
  21.       printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connecyion));  
  22.     else  
  23.       fprintf(stderr,"Insert error %d : %s \n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));  
  24.   
  25.     mysql_close(&my_connecyion);  
  26.   }  
  27.   else{  
  28.     fprintf(stderr,"Connection failed\n");  
  29.     if(mysql_errno(&my_connecyion))  
  30.       fprintf(stderr,"Connection error %d : %s\n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));  
  31.   }  
  32.   
  33.   return EXIT_SUCCESS;  
  34. }  


運行結果:

 

 

在這裡特別需要注意的是:

函數mysql_affected_rows返回的是被一個更新操作修改的行數,而不是滿足where子句的行數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved