转载自:http://abirdofparadise.blog.hexun.com/8900253_d.html

#include

#include

void   main(){

MYSQL   *mysql;

MYSQL_RES   *res;

MYSQL_ROW   row;

char   *query;

int   t,r;

mysql_init(mysql);

if   (!mysql_real_connect(mysql,"localhost","mysql",

"mysql","deneme",0,NULL,0))

{

printf(   "Error   connecting   to   database:   %s/n",mysql_error(mysql));

}

else   printf("Connected.../n");

query="select   *   from   Deneme";

t=mysql_real_query(mysql,query,(unsigned   int)   strlen(query));

if   (t)

{

printf("Error   making   query:   %s/n",

mysql_error(mysql));

}

else   printf("Query   made.../n");

res=mysql_use_result(mysql);

for(r=0;r<=mysql_field_count(mysql);r++){

row=mysql_fetch_row(res);

if(row<0)   break;

for(t=0;t

printf("%s   ",row[t]);

}

printf("/n");

}

mysql_close(mysql);

}

简介

C   APIs包含在mysqlclient库文件当中与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询。有一些例子在MySQL原代码的clients目录里。

MySQL   C   变量类型

以下变量类型在MySQL的库当中定义。我们需要这些变量是为了使用MySQL的函数。这些变量有详细的解释,但是这些解释对于写代码来说并不重要。

MYSQL

以下代码块是用来连接数据库的通讯过程

typedef   struct   st_mysql   {

NET                       net;                         /*   Communication   parameters   */

gptr                     connector_fd;       /*   ConnectorFd   for   SSL   */

char                     *host,*user,*passwd,*unix_socket,

*server_version,*host_info,*info,*db;

unsigned   int     port,client_flag,server_capabilities;

unsigned   int     protocol_version;

unsigned   int     field_count;

unsigned   int     server_status;

unsigned   long   thread_id;             /*   Id   for   connection   in   server   */

my_ulonglong   affected_rows;

my_ulonglong   insert_id;               /*   id   if   insert   on   table   with   NEXTNR   */

my_ulonglong   extra_info;                             /*   Used   by   mysqlshow   */

unsigned   long   packet_length;

enum   mysql_status   status;

MYSQL_FIELD       *fields;

MEM_ROOT             field_alloc;

my_bool               free_me;                 /*   If   free   in   mysql_close   */

my_bool               reconnect;             /*   set   to   1   if   automatic   reconnect   */

struct   st_mysql_options   options;

char                     scramble_buff[9];

struct   charset_info_st   *charset;

unsigned   int     server_language;

}   MYSQL;

MYSQL_RES

这段代码返回查询结果的行。返回的数据称为“数据集”

typedef   struct   st_mysql_res   {

my_ulonglong   row_count;

unsigned   int     field_count,   current_field;

MYSQL_FIELD       *fields;

MYSQL_DATA         *data;

MYSQL_ROWS         *data_cursor;

MEM_ROOT             field_alloc;

MYSQL_ROW           row;                         /*   If   unbuffered   read   */

MYSQL_ROW           current_row;         /*   buffer   to   current   row   */

unsigned   long   *lengths;               /*   column   lengths   of   current   row   */

MYSQL                   *handle;                 /*   for   unbuffered   reads   */

my_bool               eof;                         /*   Used   my   mysql_fetch_row   */

}   MYSQL_RES;

MYSQL_ROW

这个结构是数据行的一个安全表示法。你无法使用以空字符结束的串,因为数据在这个串可以是二进制,   也许没有包括任何字符。

typedef   struct   st_mysql_field   {

char   *name;                                       /*   Name   of   column   */

char   *table;                                     /*   Table   of   column   if   column   was   a   field   */

char   *def;                                         /*   Default   value   (set   by   mysql_list_fields)   */

enum   enum_field_types   type;       /*   Type   of   field.   Se   mysql_com.h   for   types   */

unsigned   int   length;                     /*   Width   of   column   */

unsigned   int   max_length;             /*   Max   width   of   selected   set   */

unsigned   int   flags;                       /*   Div   flags   */

unsigned   int   decimals;                 /*   Number   of   decimals   in   field   */

}   MYSQL_FIELD;

my_ulonglong

该类型用于行数,mysql_affected_rows()   、mysql_num_rows()和mysql_insert_id()   。该类型提供范围0   到1.84.e19   的支持。在一些系统,   试图打印出my_ulonglong类型的值是不行的.要显示这样的值,   使用%lu   printf   格式,把它转换成unsigned   long类型就行了。例如:

printf(Number   of   rows:   %lu/n",   (unsigned   long)   mysql_num_rows(result));

typedef   unsigned   long   my_ulonglong;

连接MySQL,查询数据

现在假设MySQL已安装,   用户和数据表在数据库被创造。以防有什么不明问题的情况,   请参考www.mysql.com   网站。

前面已经说过,MySQL的库文件在mysqlclient。因此在编译MySQL程序的时候有必要加上-lmysqlclient编译选项。MySQL的头文件在/usr/include/mysql目录下(根据Linux的发行版本的不同,这个目录也有所不同),因此你的程序头部看起来有点这个样子:

#include

MySQL的变量类型和函数都包含在这个头文件当中

然后,我们需要创建连接数据库的变量,可以简单地这么做:

MYSQL   *mysql;

在连接数据库之前,我们要调用以下函数初始化这个变量:

mysql_init(MYSQL   *mysql)

然后

MYSQL   *   STDCALL   mysql_real_connect(MYSQL   *mysql,

const   char   *host,

const   char   *user,

const   char   *passwd,

const   char   *db,

unsigned   int   port,

const   char   *unix_socket,

unsigned   int   clientflag);

该函数被调用连接到数据库。host是MySQL服务器的主机名,user是登录的用户名,passwd是登录密码,db是要连接的数据库,port是MySQL服务器的TCP/IP端口,unix_socket是连接类型,clientflag是MySQL运行成ODBC数据库的标记。在这篇文章当中该标记设成0,连接寻建立后,这个函数返回0。

现在可以连接数据库,进行查询了:

char   *query;

使用这个字符串我们可以创立任何SQL查询语句进行查询。执行这个查询的函数是:

int   STDCALL   mysql_real_query(MYSQL   *mysql,

const   char   *q,

unsigned   int   length);

mysql是我们前面用过的变量,q是SQL查询语句,length是这个查询语句的长度。如果查询成功,函数返回0。

查询之后,我们要到一个MYSQL_RES变量来使用查询的结果。以下这行创立这个变量:

MYSQL_RES   *res;

然后

mysql_use_result(MYSQL   *query)

该函数读出查询结果。

尽管可以很容易地查询了,要用这个查询的结果还要用到其它的函数。第一个是:

MYSQL_ROW   STDCALL   mysql_fetch_row(MYSQL_RES   *result);

该函数把结果转换成“数组”。你可能注意到了,该函数返回的是MYSQL_ROW变量类型。以下语句创立那样的变量:

MYSQL_ROW   row;

如前所解释的,变量row是一个字符串数组。也就是说,row[0]是数组的第一个值,row[1]是数组的第二个值...当我们用mysql_fetch_row的时候,接着变量row会取得结果的下一组的数据。当到了结果的尾部,该函数返回一负值。最后我们要关闭这个连接:

mysql_close(MYSQL   *mysql)

一些有用的函数

看看如何取得一个表格的字段,以下这个函数可能实现这个功能:

unsigned   int   STDCALL   mysql_num_fields(MYSQL   *mysql);

这个函数返回表格里有多少个字段。

取得“数据集”的数目,用:

my_ulonglong   STDCALL   mysql_num_rows(MYSQL_RES   *res);

my_ulonglong   STDCALL   mysql_affected_rows(MYSQL   *mysql);

这个函数是用来得到受INSERT,   DELETE,   UPDATE查询语句影响的“数据集”数目。注意该函数返回的数据类型是my_ulonglong

c语言程序如何链接到数据库,c语言如何链接到数据库相关推荐

  1. c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt

    c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...

  2. 统计字符 c语言程序,统计字符个数的C语言程序.doc

    统计字符个数的C语言程序.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  3. Linux下C语言程序编写及执行和分步骤编译链接C源代码

    实验一:Linux下C语言程序编写及执行 //hello.c #include <stdio.h> int main(){int x = 1;int y = 2;int sum = x + ...

  4. c语言程序的入口是哪部分,C语言入口函数和LD_PRELOAD环境变量

    零.C语言入口函数 从第一天学习C语言开始,我们的脑子里就深深烙下这样一个概念:C语言程序总是从main()函数开始执行,main()函数结束,程序也就结束了.在平时的练习中貌似这没有问题,但事实真的 ...

  5. 易语言程序假死优化_易语言假死无响应采用处理事件解决办法

    易语言假死无响应采用处理事件解决办法 处理事件() 一个比较简单的理解是:让程序反应过来 这个函数一般是用在延时前面或后面,如果不用的话程序很容易形成假死,造成程序无响应 如下图,虽然这个程序还在运行 ...

  6. 运行一个c语言程序主要包括哪些步骤,运行C语言程序的步骤.doc

    运行C语言程序的步骤 运行C语言程序的编辑(把程序代码输入,交给计算机).编译(成目标程序文件.obj).是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2 ...

  7. 开发一个c语言程序需要经过哪些步骤,C语言编译过程的4个步骤

    GCC 编译器在编译一个C语言程序时需要经过以下 4 步: (1)将C语言源程序预处理,生成.i文件. (2)预处理后的.i文件编译成为汇编语言,生成.s文件. (3)将汇编语言文件经过汇编,生成目标 ...

  8. c语言程序与设计苏小红,c语言程序设计苏小红

    <实验教学示范中心建设教材·国家精品课程主讲教材:C语言程序设计(第2版)>是一本兼具趣味性和实用性的C语言程序设计教材.全书由13章组成,内容包括:为什么要学C语言,C数据类型,简单的算 ...

  9. 电子时钟单片机c语言程序,51单片机电子时钟C语言程序

    本程序基于ATM89系列单片机的电子时钟C语言程序,能显示月日时分秒,同时还能调节其值!显示方式用六个8段数码管! #include//头文件 #define uchar unsigned char/ ...

  10. c语言程序中的基本功能,c语言程序中的基本功能模块为什么?

    c语言程序中的基本功能模块为"函数".一个C语言程序可以由一个主函数和若干个函数构成:一个大的应用程序一般应该分为多个程序模块,每一个模块用来实现一个功能,而模块的功能是由函数完成 ...

最新文章

  1. 微信公众号支付(二):统一下单
  2. webhook php自动部署,git利用webhook实现自动部署​
  3. win101909要不要更新_win10更新好还是不更新_win10更新有什么用
  4. PHP foreach遍历数组(多种方式)
  5. Kanboard简单的可视化任务板,项目管理
  6. 香肠派对电脑版_《香肠派对》新春直播活动来袭
  7. 数据底座_体验当今计算机的未来:通过智能底座将您的Galaxy S4变成PC
  8. Prime Number Aizu - 0009(素数筛)
  9. kafka tool 查看指定group下topic的堆积数量_ELK架构下利用Kafka Group实现Logstash的高可用...
  10. mysql数据库前端缓存_什么是MySQL数据库的缓存池原理?看完或许就懂了
  11. java 扫描类_Java扫描指定包中所有类
  12. UVa10082 - WERTYU
  13. ArcGIS Server 10.1发布数据源为ArcSDE(直连)的MXD【转】
  14. 关于Xcode的Other Linker Flags
  15. 2018-2-13-win10-uwp-如何让WebView标识win10手机
  16. python数据采集卡_高速数据采集卡在雷达信号的采集与分析中的应用笔记
  17. OpenDaylight VTN 项目指南
  18. ​EMNLP 2022 | 预训练语言模型的时空效率优化
  19. Deepin与Debian的对应关系
  20. 金陵科技学院计算机分数,2018金陵科技学院录取分数线

热门文章

  1. Bailian3250 字母重排【排序】
  2. HDU1420 Prepared for New Acmer【快速模幂】
  3. I00038 自守数(Automorphic number)
  4. UVA1585 UVALive3354 Score【水题】
  5. I00004 贝尔三角形(解法二)
  6. 强悍的 Linux —— tar.xz 文件的解压
  7. 机器学习实践指南(五)—— GD/SGD/MSGD 伪代码演示
  8. Matlab Tricks( 八)—— 将 pgm 格式文件转换为 png 格式
  9. 用python画漂亮图-用Python画一些漂亮图形--Quora代码赏析
  10. python 菜鸟-Python3 模块