MySQL的C语言API接口

1、首先当然是连接数据库,函数原型如下:

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 long clientflag);

第一个参数 MYSQL是 C api中一个非常重要的变量,里面内存非常丰富,有port,dbname,charset等连接基本参数。它也包含了一个叫 st_mysql_methods的结构体变量,该变量里面保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。mysql_real_connect函数中各参数,基本都是顾名思意。

2、连接数据库成功之后就可以执行sql语句了使用mysql_query
int STDCALL mysql_query(MYSQL *mysql, const char *q);

第一个参数上面已经介绍过,第二个参数为要执行的sql语句。

这个函数总体就两步:

(1)发送sql语句,其实就一个socket发送sql 语句,加上mysql固定的协议头。懒的去看源码了,抓了下包,如下:
0000 19 00 00 00 0373 65 6c 65 63 74 20 61 70 70 5f .....select app_
0010 6e 61 6d 65 20 66 72 6f 6d 20 61 70 70 name from app
红色部分是协议,前面两位其实就是包的长度。具体协议没研究过。

(2)然后就是接受结果,这里将会调用MYSQL变量中的st_mysql_methods中的read_query_result函数指针

3、获取结果

sql执行完以后,如果是查询语句,我们当然还要读取数据,如果update,insert等语句,那么就看下操作成功与否即可。我们来看看如何获取查询结果: 如果mysql_query返回成功,那么我们就通过mysql_store_result这个函数来读取结果。原型如下:

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);

该函数会调用MYSQL变量中的st_mysql_methods中的 read_rows函数指针来获取查询的结果。同时该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果。同时该函数malloc了一片内存空间来存储查询过来的数据,所以我们一定要记的 free(result),不然是肯定会造成内存泄漏的。 执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了,下面的api基本就是读取MYSQL_RES 中的数据。例如mysql_fetch_row这个函数,就是读去查询结果的一行。函数原型如下

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

它会返回一个MYSQL_ROW变量,MYSQL_ROW其实就是char **.就当成一个二维数组来用吧。还有很多api,不再一一介绍,大部分信息都在MYSQL_RES MYSQL这两个结构体中。具体可以参考mysql官方网站: http://dev.mysql.com/doc/refman/5.1/en/c.html 突然发现官方网站资料好全面,貌似比任何书都要好。

下面来个例子:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<mysql/mysql.h>
#define MAX_COLUMN_LEN  32
int main(int argc , char *argv[])
{
  MYSQL my_connection;
  MYSQL_RES *result;
  MYSQL_ROW sql_row;
  MYSQL_FIELD *fd;
  char column[MAX_COLUMN_LEN][MAX_COLUMN_LEN];
  int res;
  mysql_init(&my_connection);
  if(mysql_real_connect(&my_connection,"127.0.0.1","用户","密码","数据名称",3306,NULL,0))
  {
    perror("connect");
    res=mysql_query(&my_connection,"select * from app");//查询
    if(!res)
    {
      result=mysql_store_result(&my_connection);//保存查询到的数据到result
      if(result)
      {
        int i,j;
        printf("the result number is %lu\n ",(unsigned long)mysql_num_rows(result));
        for(i=0;fd=mysql_fetch_field(result);i++)//获取列名
        {
          bzero(column[i],sizeof(column[i]));
          strcpy(column[i],fd->name);
        }
        j=mysql_num_fields(result);
        for(i=0;i<j;i++)
        {
          printf("%s\t",column[i]);
        }
        printf("\n");
        while(sql_row=mysql_fetch_row(result))//获取具体的数据
        {
          for(i=0;i<j;i++)
          {
            printf("%s\t",sql_row[i]);
          }
          printf("\n");
        }

      }
    }
    else
    {
      perror("select");
    }
  }
  else
  {
    perror("connect:error");
  }
  mysql_free_result(MYSQL_RES *result);//释放结果资源
  mysql_close(&my_connection);//断开连接

}

上面这个例子就是从一个表中查数据,然后输出。 如果要insert或者update,只需要修改具体的sql既可。具体的操作都是通过mysql_query这个函数来搞定。 现在来讲编译的方法吧,这里我们需要.h以及.so库。我们可以在 http://dev.mysql.com/downloads/connector/c/6.0.html 下载Connector/C。简单的方法就是: 把里面include的东西拷贝到/usr/include/mysql/下面去,这样编译的时候就不需要加-I了,然后把lib下面的东西拷贝的/usr/lib/下去。

gcc具体的编译方法:gcc ***.c -o *** -lmysqlclient

(0)

相关推荐

  • PHP实现手机归属地查询API接口实现代码

    复制代码 代码如下: <?php header("Content-Type:text/html;charset=utf-8″); if (isset($_GET['number'])) { $url = 'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo'; $number = $_GET['number']; $ch = curl_init(); curl_setopt($ch,

  • PHP手机号码归属地查询代码(API接口/mysql)

    首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库.正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本.我免费为你提供一个ACCESS数据库,包含17万多条数据,常用的130-139.150-159以及180-189开头手机号码段都在其中,你可以借助数据库工具轻松地将它转换成MYSQL或其它版本数据库 最新手机号码数据库下载地址:http://xiazai.jb51.net/201209/yuanma/phone-numbe

  • 各种快递查询--Api接口

    授权成功我的密钥 如有转载,请标明来自此出处http://blog.csdn.net/qxs965266509,必须注意! 爱查快递API使用说明文档API地址: 以前:http://api.ickd.cn/?com=[]&nu=[]&id=[]&type=[]&encode=[]&ord=[]&lang=[] 目前:http://api.ickd.cn/?id=[]&secret=[]&com=[]&nu=[]&type=[

  • 基于laravel制作APP接口(API)

    前期准备 前言,为什么做以及要做个啥 本人姓小名白,不折不扣编程届小白一名,但是自从大一那会儿接触到编程这件奇妙的事情,就完完全全的陷入的程序的世界. 这不,最近又开始折腾APP了,话说现在开发一款APP真是容易,只用JavaScript和一点点HTML+css技术就可以完成.但是做APP的后台就不一样了.开发了APP,想让读点数据进去,那我们就要去开发个后台了. laravel框架,是我最喜欢的PHP框架了,没有之一.去年就曾经用laravel写了我的个人网站但粗糙程度让我十分脸红,好了不扯了

  • PHP微信红包API接口

    首先给大家看一看这个表格: 根据微信高级红包接口,开发PHP版本的API接口,现在进行主要代码分析. 红包接口调用请求代码,所有请求参数为必填参数与文档对应: class Wxapi { private $app_id = 'wxXXXXXXXXXXXX'; //公众账号appid,首先申请与之配套的公众账号 private $app_secret = 'XXXXXXXXXXXXXXXXXXXXXXXX';//公众号secret,用户获取用户授权token private $app_mchid

  • MySQL的C语言API接口

    1.首先当然是连接数据库,函数原型如下: 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 long clientflag); 第一个参数 MYSQL是 C api中一个非常重要的变量,里面内存非常丰富

  • PHP语言对接抖音快手小红书视频/图片去水印API接口源码

    以下为PHP语言调用去水印接口的示例,分别展示GET请求方式和POST请求方式的调用方式.示例代码中用到的userId和secretKey请前往开发者接口管理中心获取. 接口文档:https://jx.henghengmao.com/page/apidoc GET请求方式调用接口示例: $url = 'https://v.douyin.com/JjEFdHT/'; //请把此处的userId和secretKey换成你自己的 这是GET请求方式 $api = 'https://api.henghe

  • PHP实现的同步推荐操作API接口案例分析

    本文实例分析了PHP实现的同步推荐操作API接口.分享给大家供大家参考,具体如下: 文档 1. 功能 同步推荐关系 2. 接口方法 syncRelation 3. 参数描述 OriginalUsername 查询的用户用户名 RecommandUsername 推荐人用户名 4. 返回值 status 1成功 9 失败 5. 备注 Status=1 原用户不存在,关系未建立 Status=2 推荐用户不存在,关系未建立 Status=3 原用户存在,并且没有推荐人,推荐用户也存在,成功建立关系

  • PHP实现的注册,登录及查询用户资料功能API接口示例

    本文实例讲述了PHP实现的注册,登录及查询用户资料功能API接口.分享给大家供大家参考,具体如下: 服务端 <?php require 'conn.php'; header('Content-Type:text/html;charset=utf-8'); $action = $_GET['action']; switch ($action) { //注册会员 case"adduserinfo"; $username = lib_replace_end_tag(trim($_GET

  • .NET Core利用swagger进行API接口文档管理的方法详解

    一.问题背景 随着技术的发展,现在的开发模式已经更多的转向了前后端分离的模式,在前后端开发的过程中,联系的方式也变成了API接口,但是目前项目中对于API的管理很多时候还是通过手工编写文档,每次的需求变更只要涉及到接口的变更,文档都需要进行额外的维护,如果有哪个小伙伴忘记维护,很多时候就会造成一连续的问题,那如何可以更方便的解决API的沟通问题?Swagger给我们提供了一个方式,由于目前主要我是投入在.NET Core项目的开发中,所以以.NET Core作为示例 二.什么是Swagger S

  • Spring Boot Security 结合 JWT 实现无状态的分布式API接口

    简介 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.JSON Web Token 入门教程 这篇文章可以帮你了解JWT的概念.本文重点讲解Spring Boot 结合 jwt ,来实现前后端分离中,接口的安全调用. Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权. 快速上手 之前的文章已经对 Spring Security 进行

  • 易语言API助手使用方法

    易语言API助手它的唯一功能就是方便查询API函数命令,能够自动在程序中加入指定dll命令声明的向导程序. 1.先了解一下API,Application Programming Interface,应用程序编程接口,编程人员通过这个接口,可以调用系统某些软件或者硬件的功能! 2.易语言的API助手对API进行了分类,可以以英文或中文的形式查看,同时提供了中英文索引查找和一些例程! 3.我们可以通过易语言的工具---执行易向导,来导入需要的API助手中的函数! 4.选中API助手,然后就会自动打开

  • Django使用AJAX调用自己写的API接口的方法

    在这个例子中,我们将使用Django编写饿了么高校外卖商家查询API接口,并且使用AJAX技术来实现API接口的使用,包括使用ajax get方法加载更多数据,使用ajax方法来更新.修改.新增.删除数据.利用API可以做到前后端分离,为开发web应用提供了便利. 安装rest framework 首先使用Pycharm新建一个Django项目,并且使用virtualenv或者pipenv虚拟环境 创建成功会自动安装Django2.1和所需依赖,restframework框架需要自己手动安装 /

  • PHP开发api接口安全验证操作实例详解

    本文实例讲述了PHP开发api接口安全验证操作.分享给大家供大家参考,具体如下: php的api接口 在PHP的开发工作中,对API接口开发不会陌生,后端人员写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json, 在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证来屏蔽某些调用. 验证原理示意图 原理 从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名. ● 时间戳:当前时间 ●

  • python 调用API接口 获取和解析 Json数据

    任务背景: 调用API接口数据,抽取我们所需类型的数据,并写入指定mysql数据库. 先从宏观上看这个任务,并对任务进行分解: step1:需要学习python下的通过url读取数据的方式: step2:数据解析,也是核心部分,数据格式从python角度去理解,是字典?列表?还是各种嵌套? step3:连接mysql数据库,将数据写入. 从功能上看,该数据获取程序可以分为3个方法,即step1对应方法request_data(),step2对应方法parse_data(),step3对应data

随机推荐