免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3776 | 回复: 4
打印 上一主题 下一主题

怎样用c/c++编程连接mysql数据库? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-07 15:25 |只看该作者 |倒序浏览
怎样用c/c++编程连接mysql数据库?

http://www.mysql.com/doc/en/C.html   
   
  [转贴自http://homepage.qdcatv.com.cn/antonio/mysql/mysql.htm]   
   
  执行一个查询有以下几个步骤要做。首先执行一个查询,然后保存结果,   
  得到的是一个子集。这里是一个小例子:
  1. #include     
  2.   #include     
  3.   #include   "mysql.h"   
  4.    
  5.   MYSQL   mysql;   
  6.   MYSQL_RES   *res;   
  7.   MYSQL_ROW   row;   
  8.    
  9.   void   exiterr(int   exitcode)   
  10.   {   
  11.   fprintf(   stderr,   "%s\n",   mysql_error(&mysql)   );   
  12.   exit(   exitcode   );   
  13.   }   
  14.    
  15.   int   main()   
  16.   {   
  17.   uint   i   =   0;   
  18.    
  19.   if   (!(mysql_connect(&mysql,"host","username","password")))     
  20.   exiterr(1);   
  21.    
  22.   if   (mysql_select_db(&mysql,"payroll"))   
  23.   exiterr(2);   
  24.    
  25.   if   (mysql_query(&mysql,"SELECT   name,rate   FROM   emp_master"))   
  26.   exiterr(3);   
  27.    
  28.   if   (!(res   =   mysql_store_result(&mysql)))   
  29.   exiterr(4);   
  30.    
  31.   while((row   =   mysql_fetch_row(res)))   {   
  32.   for   (i=0   ;   i   <   mysql_num_fields(res);   i++)     
  33.   printf("%s\n",row[i]);   
  34.   }   
  35.    
  36.   mysql_free_result(res);   
  37.   mysql_close(&mysql);   
  38.   }   
复制代码
mysql_query   函数将把查询送给服务器,如果查询成功,调用mysql_store_result   
  函数将分配一个MYSQL_RES   结构并且重新从服务器获得一个结果集。你可以用     
  mysql_fetch_row   函数来查看数据。这样做你将获得一个   MYSQL_ROW   指针指向数   
  据中的一行。   MYSQL_ROW   指针是一简单的字符串数组。所有的数据类型被转换成   
  字符串送到客户端。   
      
   
  mysql_num_fields   函数将告诉你返回的列数。你可以继续调用   mysql_fetch_row   
  直到它返回一个空指针以得到查询中的每一行。   
   
  注意在这个例子里,我们没有检查有空指针的列。如果你不使用非空列的表,那么   
  你必须检查一个特殊行的列是否为空。   
   
  一旦你使用完毕一个结果集,你必须释放它。这通过   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。   
======================

我连过成功了!
  1. #include   "/include/mysql/mysql.h"   /*为绝对路径*/     
  2.   #include   <stdio.h>     
  3.    
  4.   int   main(int   argc,char   *argv[])     
  5.   {     
  6.   char   *user   =   "root",   *pwd   =   "mysql",   *dbname   =   "mysql";     
  7.   MYSQL   mysql;     
  8.   MYSQL_RES   *mysql_ret;     
  9.   MYSQL_ROW   mysql_row;     
  10.   unsigned   long   num_rows;     
  11.   int   ret;     
  12.    
  13.   mysql_init(&mysql);     
  14.    
  15.   if(mysql_real_connect(&mysql,NULL,user,pwd,dbname,0,NULL,0))     
  16.   {     
  17.   printf("Connection   success!\n");     
  18.   ret   =   mysql_query(&mysql,"select   *   from   user");     
  19.   if(!ret)     
  20.   {     
  21.   printf("Query   Success!\n");     
  22.   mysql_ret   =   mysql_store_result(&mysql);     
  23.   if(mysql_ret   !=   NULL)     
  24.   {     
  25.   printf("Store   Result   Success!\n");     
  26.   num_rows   =   mysql_num_rows(mysql_ret);     
  27.   if(num_rows   !=   0)     
  28.   {     
  29.   printf("%d\n",num_rows);     
  30.   while(mysql_row   =   mysql_fetch_row(mysql_ret))     
  31.   {     
  32.   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]);     
  33.   }     
  34.   }     
  35.   else     
  36.   {     
  37.   printf("mysql_num_rows   Failed!\n");     
  38.   exit(-1);     
  39.   }     
  40.   mysql_free_result(mysql_ret);     
  41.   exit(0);     
  42.   }     
  43.   else     
  44.   {     
  45.   printf("Store   Result   Failed!\n");     
  46.   exit(-1);     
  47.   }     
  48.   }     
  49.   else     
  50.   {     
  51.   printf("Query   Failed!\n");     
  52.   exit(-1);     
  53.   }     
  54.   }     
  55.   else     
  56.   {     
  57.   printf("Connection   Failed\n");     
  58.   exit(-1);     
  59.   }     
  60.   }   
复制代码
如果你包含了正确的头文件而在连接的时候,   告诉你没有符号连接     
  你应该连接你需要的库     
   
  我的/lib/mysql/libmysqlclient.so下面     
  gcc   -L/lib/mysql   -lmysqlclient   -o   tes   tes.c   进行编译   
   
   
  RedHat_shu@hotmail.com

论坛徽章:
0
2 [报告]
发表于 2011-06-07 16:56 |只看该作者
Mark下儿、、

论坛徽章:
0
3 [报告]
发表于 2011-06-07 18:50 |只看该作者
标记!以后也许用得着!

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
4 [报告]
发表于 2011-06-07 22:07 |只看该作者
怎样用c/c++编程连接mysql数据库?

   
   
  [转贴自]   
   
  执行一个查询有以下几个步骤要做 ...
so_brave 发表于 2011-06-07 15:25


如何使用游标和帮定变量?

论坛徽章:
0
5 [报告]
发表于 2011-06-10 11:29 |只看该作者
mark
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP