linux下c程序访问mysql小例子

缘起:有同学今天问老男孩C程序访问mysql问题,特写此文。       

 
 1、c程序访问mysql代码 #include <stdio.h>  
   
 #include <stdlib.h>  
   
 #include <mysql.h>  
   
   
 #define DB_SERVER "192.168.10.33"  
   
 #define DB_NAME "ddource"  
   
 #define DB_USER "oldboy"  
   
 #define DB_PWD  "oldboy123"  
   
   
 static 
  MYSQL *db_handel,mysql;   
 static 
  MYSQL_ROW row;   
 static 
   
 int 
  query_error;   
   
 MYSQL_RES *query_test( 
 char 
  *sql);   
 int 
  query_show(MYSQL_RES *result);   
 int 
  main( 
 int 
  argc, 
 char 
  *argv[])   
 {   
         MYSQL_RES * results;   
         results=query_test( 
 "select upper(DOC) from t_doc limit 30;" 
 ); 
 //获取记录  
   
         query_show(results); 
 //显示记录  
   
          
 return 
  0;   
 }   
   
 //查询记录  
   
 MYSQL_RES *query_test( 
 char 
  *sql)   
 {   
          
 static 
  MYSQL_RES *query_result;   
         printf( 
 "%s\n" 
 ,sql);   
         mysql_init(&mysql);   
         db_handel=mysql_real_connect(&mysql,DB_SERVER,DB_USER,DB_PWD,DB_NAME,0,0,0); 
 //打开数据库连接  
   
          
 if 
 (db_handel==NULL) 
 //错误处理  
   
         {   
                 printf(mysql_error(&mysql));   
                  
 return 
  NULL;   
         }   
   
         query_error=mysql_query(db_handel, 
 "set names utf8" 
 ); 
 //查询  
   
         query_error=mysql_query(db_handel,sql); 
 //查询  
   
          
 if 
 (query_error!=0) 
 //错误处理  
   
         {   
                 printf(mysql_error(db_handel));   
                  
 return 
  NULL;   
         }   
         query_result=mysql_store_result(db_handel); 
 //获取记录  
   
         mysql_close(db_handel); 
 //关闭数据库  
   
          
 return 
  query_result; 
 //返回记录  
   
 }   
 //显示记录  
   
 int 
  query_show(MYSQL_RES *result)   
 {   
         unsigned  
 int 
  i,num_fields;   
         MYSQL_FIELD *fileds;   
         num_fields=mysql_num_fields(result); 
 //获取字段数  
   
         fileds=mysql_fetch_fields(result); 
 //获取字段数组  
   
          
 while 
 ((row=mysql_fetch_row(result))!=NULL) 
 //循环显示  
   
         {   
                  
 for 
 (i=0;i<num_fields;i++)   
                 {   
                      
 //正式操作这里通过fwrite写入到文件  
   
             printf( 
 "%s \t" 
 ,row[i]);   
                 }   
            
             printf( 
 "\n" 
 );   
     }   
          
 return 
  0;   
 }   
   
 2、编译 
    
 [root@test oldboy]# gcc -o select select.c -lmysqlclient -I/usr/local/webserver/mysql/include/mysql/ -L/usr/local/webserver/mysql/lib/mysql/   
 3、执行  
   
 [root@test oldboy]# ./select    
 ./select: error  
 while 
  loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory   
 [root@test oldboy]# find / -name libmysqlclient.so.15   
 /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.15   
 报错了...。   
   
 4、问题原因:  
   
 出现上面的错误是因为系统运行的时候没有找到程序运行所需要的libmysqlclient.so.15运行库文件,解决方法有两个:   
 方法一:直接把libmysqlclient.so.15这个文件拷贝到系统指定的/usr/lib库文件目录中。   
 方法二:设置/etc/ld.so.conf文件,编辑该文件,在文件中加入libmysqlclient.so.15所在目录,保存退出。需要注意的是,每次改动ld.so.conf之后需要运行ldconfig来确认刷新。   
 方法三:Add /usr/local/mysql/lib/mysql to you LD_LIBRARY_PATH environment variable   
   
 5、最终解决办法:  
   
 如果出上面的提示可以通过下面的方法解决:   
 [root@test oldboy]# vi /etc/ld.so.conf   
 include ld.so.conf.d/*.conf   
 /usr/ofed/lib   
 /usr/local/webserver/mysql/lib   
 /usr/local/webserver/mysql/lib/mysql   
 #----------------------  
   
 执行ldconfig 生效   
   
 6、ldconfig使用方法:  
    
 ldconfig [options] [libs]   
 命令ldconfig决定位于目录/usr/lib和/lib下的共享库所需的运行的链接,这些链接在命令行上的libs指定并被保存在 /etc/ld.so.conf中。命令ldconfig和动态链接/装载工具ld.so协同工作,一起来创建和维护对最新版本共享库的链接。   
 ldconfig的两个选项   
 -p:仅打印出文件/etc/ld.so.cache的内容,此文件是ld.so所知道的共享库的当前列表   
 -v:更新/etc/ld.so.cache的内容,列出每个库的版本号,扫描的目录和所有创建和更新的链接  
 

 http://dev.mysql.com/doc/refman/5.1/en/c-api-functions.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值