Mysql—C语言API接口

2023-11-14

Mysql—C语言API接口


了解api接口,自己实现mysql客户端,在代码中访问数据库操作数据。

一、mysql-arp访问数据的操作流程

1. 初始化mysql操作句柄;

2. 连接mysql服务器;

3. 设置mysql客户端字符集(保持与服务器一致);

4. 选择要操作的数据库;

5. 定义sql语句,并且执行语句;

(就是将sql发送给服务器,服务器进行解析完成操作);

  • 如果是新增,修改,删除操作语句执行成功意味着本次操作完成,
  • 但是如果是查询,语句执行成功只是第一步。

6. 将查询结果保存到本地;

7. 获取结果中的条数和列数;

8. 根据条数和列数遍历结果集;

9. 释放保存在本地的结果集;

10. 关闭mysql句柄,释放资源;

二、接口认识

1. 初始化mysql句柄

MYSQL *mysql_init(MYSQL *mysql);
  mysql:传入一个句柄的地址进行初始化,
         如果传入NULL,则内部申请空间进行初始化并返回申请的句柄的首地址。
  返回值:失败返回NULL

2. 连接mysql服务器

MYSQL *mysql_real_connect(MYSQL *mysql, char *host, char *user, char *pass, 
                          char *db, int port, char *socket, int clientflag);
  mysql:mysql_init返回的句柄;
  host:mysql服务器地址;
  user:用户名;
  db:默认要操作的库名称;
  port:端口,0表示默认使用3306端口
  socket:套接字或者管道文件,通常置NULL;
  clientflag:客户端标志,通常置0;
  返回值:成功返回句柄首地址,失败返回NULL

3. 设置当前客户端的字符集

int mysql_set_character_set(MYSQL *mysql, const char *csname);	
  mysql:初始化完成的句柄;
  csname:字符集名称,通常是uft8;
  返回值:成功返回0,失败返回非0

4. 选择操作的数据库

int mysql_select_db(MYSQL *mysql, const char *db);
  mysql:初始化完成的句柄;
  db:要操作的数据库名称;
  返回值:成功返回0,失败返回非0

5. 执行sql语句

int mysql_query(MYSQL *mysql, const char *sql);
  mysql:初始化完成的句柄;
  sql:要执行的sql语句;
  返回值:成功返回0,失败返回非0

5.1 获取mysql-api接口运行失败的原因:

char * mysql_error(MYSQL *mysql)

6. 保存查询结果到本地

MYSQL_RES *mysql_store_result(MYSQL *mysql)

7. 获取结果集中的行数与列数

uint64_t mysql_num_rows(MYSQL_RES *res);
  res:保存到本地的结果集地址;
  返回值:结果集中数据的**条数**
unsigned int mysql_num_fields(MYSQL_RES *res);
  res:保存到本地的结果集地址;
  返回值:结果集中每一条数据的**列数**

8. 遍历结果集

MYSQL_ROW mysql_fetch_row(MYSQL_RES *res); 
  res:保存到本地的结果集地址;

遍历结果集,会在res中做标记,保存读写位置,每获取一条就会向后偏移;

MYSQL_ROW这是一个char *res[xxxx] - - 每个元素都是一个字段的值。

mysql结果不管是什么类型,保存过来就是一个字符串;

9. 释放结果集

int mysql_free_result(MYSQL_RES *res);

10. 关闭数据库客户端连接,销毁句柄:

int mysql_close(MYSQL *mysql);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql—C语言API接口 的相关文章

  • 删除、截断或删除以清理 MySQL 中的表

    我正在尝试清理表格 但没有摆脱表格的实际结构 我有一个id自动递增的列 我不需要保留ID号 但我确实需要它来保持其自动递增的特性 我发现了删除和截断 但我担心其中之一会完全删除整个表 从而使未来的插入命令变得无用 如何从表中删除所有记录以便
  • 'numpy.float64'对象没有属性'translate'在Python中将值插入Mysql

    import dataset db dataset connect table db 当我尝试向 Mysql 表中插入一些值时 发生了此错误 我插入表中的示例值 print Buy ticker price date OType OSize
  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • MySQL小写自动转换

    我有多个在数据库表中写入数据的 Web 服务 我想针对特定字段自动将大写字符串转换为小写字符串 mysql 有没有执行此任务的函数 假设这是表 id name language 有时 在语言字段内 Web 服务会写入大写字符串 IT 我想直
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • 主键默认可以为NULL吗?为什么这样描述呢?

    我有一张桌子 当我describe这是 mysql gt DESC my table Field Type Null Key Default Extra contact id int 11 NO PRI NULL auto incremen
  • dayname(curdate()) 不适用于 codeigniter php

    此 sql 在 phpmyadmin 中有效 但在 codeigniter php 中无效 function getProgramsHomepage data array this gt db gt select p name p star
  • 从 CSV 到 MySQL 的换行问题

    我正在将 csv 文件导入 MySQL 除了文件中的换行符之外 一切正常 我的 csv 行之一如下所示 42 E A R Classic Earplugs ear images ear classic jpg 5 Proven size s
  • 如何使用 SQL 对项目进行排序,然后按另一个条件再次排序

    我正在使用 MySQL 我想对记录进行排序 或者我想对记录进行分组 然后按另一个条件再次对其进行排序 例如我有 6 个项目 Names Group Jack G1 Dian G2 Emily G2 Dean G1 Teddy G2 Gabe
  • 从 MySQL 将 500 万行加载到 Pandas 中

    我在 本地 网络上的 MySQL 数据库中有 500 万行 连接速度非常快 而不是在互联网上 与数据库的连接工作正常 但如果我尝试这样做 f pd read sql query SELECT FROM mytable engine inde
  • 性能:cakephp-mysql 中的 UUID 与自动递增

    我正在搜索 cakePHP 生成的 UUID 32 个字符长 是否比自动增量在性能上更快 插入和选择操作的比较 我应该使用 cakePHP 生成的 UUID 还是使用 MySQL 的简单自动增量生成的 UUID 这是我发现的一个案例研究 但
  • MySQL,连接两列

    MySQL 表中有两列 SUBJECT and YEAR 我想生成一个字母数字唯一编号 其中包含主题和年份的串联数据 我怎样才能做到这一点 是否可以使用像这样的简单运算符 您可以使用CONCAT http dev mysql com doc
  • 如何使用Python3.4在tornado中进行异步mysql操作?

    我现在使用Python3 4 我想在Tornado中使用异步mysql客户端 我已经发现torndb https github com bdarnell torndb但在阅读其源代码后 我认为它无法进行异步mysql操作 因为它只是封装了M
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • java.lang.NoSuchMethodError:没有虚拟方法 setTag(Ljava/lang/Object;)

    我刚刚完成使用登录和注册屏幕与齐射的代码 但在模拟器中运行时我收到此错误 java lang NoSuchMethodError No virtual method setTag Ljava lang Object Lcom android
  • 使用表白名单选项更新 Debezium MySQL 连接器

    我正在使用 Debezium 0 7 5 MySQL 连接器 并且我试图了解如果我想使用以下选项更新此配置 最好的方法是什么table whitelist 假设我创建了一个连接器 如下所示 curl i X POST H Accept ap
  • 如何修复“未知变量'sql-mode = ANSI'”?

    使用 MySQL 5 5 27 在 my cnf 中我有 mysql sql mode ANSI 启动 mysql 控制台后我得到 unknown variable sql mode TRADITIONAL MySQL 文档服务器 SQL
  • MySQL 两种日期格式之间的转换

    用户将以这种格式输入日期 2017 年 2 月 17 日 存储在 mysql 数据库中的日期格式如下 2015 02 17 00 00 00 我想做的是 SELECT FROM insurance where DATE FORMAT in
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • SQL中的CASE WHEN使用 .

    Case具有两种格式 简单Case函数和Case搜索函数 简单Case函数 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END Case搜索函数 CASE WHEN sex 1 THEN 男 W
  • 萤石摄像头RTSP流获取(黑屏解决)

    前言 在获取萤石摄像头RTSP视频流时 视频流获取不成功 黑屏并且一直显示缓冲中 下面对获取过程中查阅的资料和解决方案做一下汇总 打开RTSP 在萤石云视频APP中打开RTSP 我的 工具 局域网设备预览 开始扫描 选择摄像头 设置 更多设
  • 本地代码上传github

    怎么将新创建的本地代码上传到github上 这里简单的记录一下 我喜欢使用命令行 这里全用命令行来实现 不了解git命令的可以去了解下 1 先在github中创建仓库 2 回到你本地项目路径下右击打开git 没有的自行安装即可 3 初始化
  • ios.js?v=7c33aa19:1183 Uncaught (in promise) AxiosError {message: ‘Request failed with status code 4

    ios js v 7c33aa19 1183 Uncaught in promise AxiosError message Request failed with status code 404 name AxiosError code E
  • mysql中 or的使用方法,mysql条件查询中与or同时使用时的注意事项!!

    我们在日常的crud开发中 经常会遇到查询数据不是预期效果的问题 但是有感觉自己的查询语句没什么问题呀 怎么会出错呢 今天我也中招了 就很烦 sql如下 在查询语句中我们有一个条件是year 2021 但是查询结果还包含了2020的数据 这
  • Windows WSL配置ubuntu环境并登录

    一 什么是WSL wsl即适用于Windows的Linux子系统 Windows subsystem for Linux 二 Windows WSL配置ubuntu环境 1 管理员运行cmd 执行以下命令启用 适用于 Linux 的 Win
  • Codeforces Round 739 (Div. 3)

    A Dislike of Threes AC代码 include
  • Git的版本和分支管理

    1 http blog csdn net xiahouzuoxin article details 9393119 2 http blog csdn net xiahouzuoxin article details 9398629 3 ht
  • Qt在linux系统中执行shell命令

    在linux系统下 Qt执行shell命令的方式有3种 1 QProcess execute ls 2 system ls 3 QProcess process new QProcess process gt start ls 注1 以上3
  • 解决ubuntu20搜狗输入法输入不了中文问题

    解决在ubuntu上安装好搜狗输入法后无法输入中文 首先按照官网的安装步骤安装 Ubuntu搜狗输入法安装指南 注意不要忘记安装依赖 输以下命令进行安装 sudo apt install libqt5qml5 libqt5quick5 li
  • 接口测试的测试用例该怎么写呢?

    作者 字节开发测试 链接 https www zhihu com question 305629217 answer 2530044958 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 一 什么是接口 接口
  • Python的exec

    目录 exec 简单使用 动态执行简单的字符串代码 动态执行较复杂的代码 执行文件中的Python代码 在exec中传参 使用中遇到的问题 参考 exec 简单使用 个人比较喜欢用Python里面的exec 可以用来动态执行字符串代码 在f
  • bootstrap方法_自助法(bootstrap)在统计检验中的应用及R语言实现过程

    Bootstrap 自助法 自举法 是非参数统计中一种重要的估计统计量方差 进而进行区间估计的统计方法 Bootstrap通过对给定数据集进行有放回的重抽样以创建多个模拟数据集 生成一系列待检验统计量的经验分布 可以计算标准误差 构建置信区
  • 随机数与简单的周期运动轨迹图案

    背景 概率论的书上有这样一个示例 设想某人在平面上从零点出发 手持一个均匀四面体 四面分别标有1 2 3 4 每个面代表一个方向 东南西北 他随意抛出后 按照这个方向走一单位长度 若干次后观测他走过的路线的轨迹 由此你有什么联想 联想倒是没
  • muduo学习笔记5——线程封装

    线程标识符 pthread self gettid thread gcc内置的线程局部存储设施 thread只能修饰POD类型 plain old data pthread atfork 线程标识符 Linux中 每个进程有一个pid 类型
  • Nginx 配置反向代理

    Nginx 配置反向代理 项目中有solrcloud的运用实例 这里拿来做反向代理的配置 solrJ客户端直接请求solr节点 用nginx为solrcloud的三个节点做统一入口处理 nginx与solr节点分布的情况如下 目的 solr
  • Typora使用笔记

    Typora使用笔记 简介 Markdown是轻量级标记语言 轻量 易读 易写且对图片 图表 公式等都有支持 Typora是比较简洁优雅的Markdown编辑器 正式版发布后要收费了 还是固定在0 11 18吧 以后有钱了就补票 Markd
  • 怎么找到一个好名字idea插件开发

    VFS简介 虚拟文件系统 VFS 是一个Intellij Platform组件 它封装了大部分对活动文件的处理操作 为了达成以下目的 提供一个处理文件的通用API 而不关心文件的具体位置 无论文件位于磁盘上 归档文件中还是HTTP服务器上
  • Java基础_JDK下载安装与配置

    文章目录 开始前准备 JDK下载 JDK安装 环境配置 验证环境配置是否成功 开始前准备 在配置JDK之前 我们需要先下载并安装好JDK 若已下载则可以跳过该环节 JDK和JRE的区别 JRE是运行环境 程序运行必需 JDK是开发环境 包含
  • Mysql—C语言API接口

    Mysql C语言API接口 一 mysql arp访问数据的操作流程 1 初始化mysql操作句柄 2 连接mysql服务器 3 设置mysql客户端字符集 保持与服务器一致 4 选择要操作的数据库 5 定义sql语句 并且执行语句 6