Linux下使用C语言访问MySQL函数

//mysqlVersion.c 

[cpp] view plain copy print ?
  1. /*************************************************************        
  2.     FileName : mysqlVersion.c    
  3.     FileFunc : 显示MySQL客户端版本       
  4.     Version  : V0.1        
  5.     Author   : Sunrier        
  6.     Date     : 2012-04-19    
  7.     Descp    : Linux下使用C语言访问MySQL函数         
  8. *************************************************************/   
  9. #include <stdio.h>  
  10. #include <mysql.h>  
  11.   
  12. void mysql_version( void )  
  13. {  
  14.     printf("MySQL client version : %s ! \n",mysql_get_client_info());  
  15. }  
  16.   
  17. int main(int argc,char *argv[])  
  18. {  
  19.     mysql_version();  
  20.       
  21.     return 0;  
  22. }  


//makefile

[cpp] view plain copy print ?
  1. #makefile开始  
  2. demo:mysqlVersion.c  
  3.     @gcc -I/usr/include/mysql mysqlVersion.c -o demo -L/usr/lib/mysql -lmysqlclient   
  4. clean   :  
  5.     @ls | grep -v ^makefile$$ | grep -v [.]c$$ | grep -v [.]h$$ | grep -v [.]sql$$ | xargs rm -rf   
  6. #makefile结束  


[Sunrier@localhost MySql]$ make
[Sunrier@localhost MySql]$ ./demo
MySQL client version : 5.0.22 !
[Sunrier@localhost MySql]$

 

 

//demo.c

[cpp] view plain copy print ?
  1. /*************************************************************       
  2.     FileName : demo.c   
  3.     FileFunc : C语言接口访问MySQL      
  4.     Version  : V0.1       
  5.     Author   : Sunrier       
  6.     Date     : 2012-04-19   
  7.     Descp    : Linux下使用C语言访问MySQL函数        
  8. *************************************************************/    
  9. #include <stdio.h>  
  10. #include <stdlib.h>  
  11. #include <mysql.h>  
  12.   
  13. int main(int argc,char *argv[])  
  14. {  
  15.     MYSQL my_connection,*conn_ptr;    
  16.     MYSQL_RES *res_ptr;  
  17.     MYSQL_ROW sqlrow;  
  18.     int iRet;     
  19.     int iTableRow,iTableCol,i,j;  
  20.     char *server = "localhost";  
  21.     char *user = "Sunrier";  
  22.     char *password = "sakila";  
  23.     char *database = "mysql";  
  24.     unsigned int uiTimeOut = 7;//设置连接超时7s  
  25.   
  26.     conn_ptr = mysql_init(&my_connection);//初始化连接句柄  
  27.     if( !conn_ptr )  
  28.     {  
  29.         fprintf(stderr,"mysql_init failed ! \n");  
  30.         return EXIT_FAILURE;  
  31.     }  
  32.       
  33.     iRet = mysql_options(&my_connection,MYSQL_OPT_CONNECT_TIMEOUT,(const char *)&uiTimeOut);//设置连接超时  
  34.     if( iRet )  
  35.     {  
  36.         fprintf(stderr,"Connection is timeout! \n");  
  37.         return EXIT_FAILURE;  
  38.     }  
  39.       
  40.     conn_ptr = mysql_real_connect(&my_connection,server,user,password,database,0,NULL,0);//连接数据库  
  41.     if( conn_ptr )  
  42.     {  
  43.         printf("Connection success!\n");  
  44.           
  45.         iRet = mysql_query(&my_connection,"select * from children");//执行SQL语句  
  46.         if( iRet )  
  47.         {  
  48.             fprintf(stderr,"select error %d: %s !\n",mysql_errno(&my_connection),mysql_error(&my_connection));//打印错误处理具体信息  
  49.             return EXIT_FAILURE;  
  50.         }  
  51.           
  52.           
  53.         res_ptr = mysql_store_result(&my_connection);//集合  
  54.         if( res_ptr )  
  55.         {  
  56.             iTableRow = mysql_num_rows(res_ptr);//行  
  57.             iTableCol = mysql_num_fields(res_ptr);//列  
  58.               
  59.             for(i=0; i<iTableRow; i++)  
  60.             {  
  61.               sqlrow = mysql_fetch_row(res_ptr);  
  62.               for(j=0; j<iTableCol; j++)  
  63.               {  
  64.                 printf("%-8s  ",sqlrow[j]);//字符串向左靠,右补空格  
  65.               }  
  66.               printf("\n");  
  67.                 
  68.             }  
  69.               
  70.             mysql_free_result(res_ptr);//完成对数据的所有操作后,调用此函数来让MySQL库清理它分配的对象  
  71.         }  
  72.           
  73.         /* 
  74.         res_ptr = mysql_use_result(&my_connection);//行 
  75.         if( res_ptr ) 
  76.         { 
  77.             while( (sqlrow = mysql_fetch_row(res_ptr)) ) 
  78.             { 
  79.                 //iTableCol = mysql_num_fields(res_ptr);//列 
  80.                 iTableCol = mysql_field_count(&my_connection);//和上面一句等价 
  81.                 for(j=0; j<iTableCol; j++) 
  82.               { 
  83.                 printf("%-8s  ",sqlrow[j]);//字符串向左靠,右补空格 
  84.               } 
  85.                 printf("\n"); 
  86.             }    
  87.             mysql_free_result(res_ptr); 
  88.         } 
  89.         */  
  90.           
  91.         mysql_close(&my_connection);//关闭连接  
  92.     }  
  93.     else  
  94.     {  
  95.           
  96.         fprintf(stderr,"Connection failed!\n");  
  97.         if( mysql_errno(&my_connection) )  
  98.         {  
  99.             fprintf(stderr,"Connection error %d: %s!\n",mysql_errno(&my_connection),mysql_error(&my_connection));  
  100.         }  
  101.     }  
  102.   
  103.     return EXIT_SUCCESS;  
  104.           
  105. }  


 

 

 


 //makefile

[cpp] view plain copy print ?
  1. #makefile  
  2. demo:demo.c  
  3.     @gcc -I/usr/include/mysql demo.c -L/usr/lib/mysql -lmysqlclient -o demo  
  4. clean   :  
  5.     @rm -rf demo  


 

 


相关知识:

当然在写MySQL客户端的程序已经需要安装了下面两个软件包,我的是VM下Red Hat Enterprise Linux 5,此前已经默认安装了

mysql-server-5.0.22-2.1.0.1.i386.rpm  MySQL服务器端
mysql-client-5.0.22-2.1.0.1.i386.rpm   MySQL客户端


如果在make的时候报下面类似的错误:
xxx.c:line:错误:mysql.h:没有那个文件或目录
先看看系统中所带的MySQL版本,命令如下:
[root@localhost MySql]# rpm -qa | grep mysql
mysql-server-5.0.22-2.1.0.1
mysql-connector-odbc-3.51.12-2.2
mysql-devel-5.0.22-2.1.0.1
mysql-5.0.22-2.1.0.1
libdbi-dbd-mysql-0.8.1a-1.2.2
[root@localhost MySql]#

如果在上面的显示信息中你没有mysql-devel-xxx-xxx(我已经安装了mysql-devel-5.0.22-2.1.0.1)的话,你需要安装对应版本的mysql-devel-version-release.architecture.rpm这个软件包为了所需的库和包含文件,如果你想要编译其他MySQL客户程序, 例如Perl模块。现在你写C语言的MySQL客户程序,现在就需要安装这个软件包。

 

先把用户切换到root用户下
1)查询下MySql版本
[root@localhost MySql]# rpm -qa  mysql
mysql-5.0.22-2.1.0.1
[root@localhost MySql]#

2)到官网下载到相应版本后,如mysql-devel-5.0.22-2.1.0.1.i386.rpm

3)安装mysql-devel-version-release.architecture.rpm软件包
[root@localhost MySql]# rpm -ivh mysql-devel-5.0.22-2.1.0.1.i386.rpm
[root@localhost MySql]#

4)重新编译链接文件后,看下是否有了mysql-devel打头的文件信息
[root@localhost MySql]# rpm -qa | grep mysql
mysql-server-5.0.22-2.1.0.1
mysql-connector-odbc-3.51.12-2.2
mysql-devel-5.0.22-2.1.0.1
mysql-5.0.22-2.1.0.1
libdbi-dbd-mysql-0.8.1a-1.2.2
[root@localhost MySql]#

 

 

其他rpm命令相关的内容

删除rpm软件包
[root@localhost MySql]# rpm -e packagename.rpm
[root@localhost MySql]#

如果在删除的过程中提示因为一些依赖关系无法删除,请用如下命令:
[root@localhost MySql]# rpm -e --nodeps packagename.rpm
[root@localhost MySql]#

查看mysql.h文件的路径(切换到root用户下)
[root@localhost MySql]# find / -name mysql.h | more
/usr/include/mysql/mysql.h
[root@localhost MySql]#

-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf :查找指定文件属于哪个RPM软件包[Query File];
-Va :校验所有的RPM软件包,查找丢失的文件[View Lost];
-e  :删除包--erase
-qa: 查找相应文件,如 rpm -qa mysql
--test:安装测试,并不实际安装
--nodeps:忽略软件包的依赖关系强行安装
--force:忽略软件包及文件的冲突


你可能感兴趣的:(c,mysql,linux,database,语言,makefile)