注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

xiaozhuge0825的博客

 
 
 

日志

 
 

C语言操作MySQL数据库方法  

2009-11-20 14:04:07|  分类: mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

2009-11-08 20:24

By Michael

  很多人用到MySQL来开发一些项目,有时为了性能,我们会直接用C语言来开发相关的模块,尤其在我们的web应用中,虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,Michael以前用PHP开发的多个项目中就使用了C语言编写的这类接口,然后再编译到php里面,供php脚本直接使用,这方面的话题就不多说了,下面主要说一下在Linux下如何用C语言连接MySQL数据库,并且读取里面的数据返回,同时如何进行编译。

  这里的大部分代码参考了MySQL发行包里面的.c源文件,大家也可以去里面找找相关的代码,下面这段代码实现了连接到本地MySQL服务器上9tmd_bbs_utf8数据库,从数据表tbb_user中根据输入的userid取得该用户的用户名并打印输出到终端。

#if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译

#include <windows.h>

#endif

#include <stdio.h>

#include <stdlib.h>

#include "mysql.h" //我的机器上该文件在/usr/local/include/mysql下

//定义数据库操作的宏,也可以不定义留着后面直接写进代码

#define SELECT_QUERY "select username from tbb_user where userid = %d"

int main(int argc, char **argv) //char **argv 相当于 char *argv[]

{

   MYSQL mysql,*sock; //定义数据库连接的句柄,它被用于几乎所有的MySQL函数

   MYSQL_RES *res; //查询结果集,结构类型

   MYSQL_FIELD *fd ; //包含字段信息的结构

   MYSQL_ROW row ; //存放一行查询结果的字符串数组

   char qbuf[160]; //存放查询sql语句字符串

  

   if (argc != 2) { //检查输入参数

   fprintf(stderr,"usage : mysql_select <userid>\n\n");

   exit(1);

   }

  

   mysql_init(&mysql);

   if (!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) {

   fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));

   perror("");

   exit(1);

   }

  

   sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));

   if(mysql_query(sock,qbuf)) {

   fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));

   exit(1);

   }

  

   if (!(res=mysql_store_result(sock))) {

   fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock));

   exit(1);

   }

  

   printf("number of fields returned: %d\n",mysql_num_fields(res));

  

   while (row = mysql_fetch_row(res)) {

   printf("Ther userid #%d 's username is: %s\n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ;

   puts( "query ok !\n" ) ;

   }

  

   mysql_free_result(res);

   mysql_close(sock);

   exit(0);

   return 0; //. 为了兼容大部分的编译器加入此行

}

编译的时候,使用下面的命令

gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况

运行的时候,执行下面的命令

./mysql_select 1

将返回如下结果:

number of fields returned: 1

Ther userid #1 's username is: Michael

query ok !

上面的代码我想大部分都能看明白,不明白的可以参考一下MySQL提供的有关C语言API部分文档,各个函数都有详细说明,有时间我整理一份常用的API说明出来

  评论这张
 
阅读(302)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018