c语言如何链接到数据库

#include   <mysql/mysql.h>  
#include   <stdio.h>  
   
  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<mysql_num_fields(res);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.h>  
  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值