【MySQL】MySQL Connect -- 详解

一、Connector / C 使用

要使用 C 语言连接 MySQL,需要使用 MySQL 官网提供的库,可以去官网进行下载:MySQL :: MySQL Community Downloads

我们使用 接口库来进行连接,要正确使用,还需要做一些准备工作:

  • 保证 MySQL 服务有效。
  • 在官网上下载合适自己平台的 MySQL Connect 库,以备后用。

现在可以不需要像上面这样做了,因为我们在安装数据库时,系统就已经帮我们安装好了。


二、准备工作

1、验证库是否引入成功

编译并运行:

可以查看到当前 mysql 客户端的版本号。


三、MySQL 接口介绍

MySQL :: Developer Zone

可以自行选择:


1、初始化 mysql_init()

要使用库,就必须先进行初始化


2、链接数据库 mysql_real_connect

初始化完毕之后,必须先链接数据库,在进行后续操作(MySQL 网络部分是基于 TCP/IP的)。

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

建立好链接之后,获取英文没有问题,如果获取中文是乱码:需要设置链接的默认字符集为 utf-8,原始默认是 latin1。


3、下发 MySQL 命令 mysql_query

第二个参数要执行的 sql 语句如 select * from table


4、获取执行结果 mysql_store_result

sql 执行完以后,如果是查询语句,当然还要读取数据。如果 updateinsert 等语句,那么就看下操作成功与否即可。

来看看如何获取查询结果: 如果 mysql_query 返回成功,那么就通过 mysql_store_result 这个函数来读取结果。原型如下:

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

 MYSQL_RES 结构体可以行列为单位把查询得到的表结构数据组织好。

在我们使用 mysql_query 函数进行查询结果后,对应的数据就被存放进了 MYSQL 结构体响应的空间中,此时我们再调用 mysql_store_result 函数,把这部分数据转储进 MYSQL_RES 结构体里。


(1)获取结果行数 mysql_num_rows


(2)获取结果列数 mysql_num_fields


(3)获取列名 mysql_fetch_fields

MYSQL_FIELD 中存储列的所有属性信息:


(4)获取结果内容 mysql_fetch_row

它会返回一个 MYSQL_ROW 变量,MYSQL_ROW 其实就是 char**,就把它当作一个二维数组来用。

注意:mysql 将所有的数据读取出来时,全都当作字符串。


5、释放结果集的空间 mysql_free_result


6、关闭 MySQL 链接 mysql_close


MySQL C api 还支持事务等常用操作,可以自行了解:

my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
my_bool STDCALL mysql_commit(MYSQL * mysql);
my_bool STDCALL mysql_rollback(MYSQL * mysql);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673912.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉与模式识别实验1-4 图像的傅立叶变换

文章目录 🧡🧡实验流程🧡🧡1. 傅立叶变换1.a 绘制一个二值图像矩阵,并将其傅立叶函数可视化。1.b 利用傅立叶变换分析两幅图像的相关性,定位图像特征。读入图像‘text.png,抽取其中的字母‘a’ 2. 离散余弦…

操作字符串获取文件名字(包含类型)

记录一种操作字符串获取文件名字的操作方式,方便后期的使用。示例: 输入:"D:/code/Test/Test.txt" 输出:"Test.txt" 设计思路: 首先查找路径中最后一个”/“,然后再通过字符串截取的…

Flutter开发效率提升1000%,Flutter Quick教程之对写好的Widget进行嵌套

通常写代码的时候,我们是先写好外面的Widget,再写里面的Widget。但是,也有的时候,我们写好了一个Widget,但是我们觉得有必要再在外面嵌套一个Widget,这时候应该怎么做呢?(还有其他方…

NVIDIA发布重磅AI创新,黄仁勋在COMPUTEX大会预示计算未来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

coredns 被误删了,可以通过重新应用 coredns 的 Deployment 或 DaemonSet 配置文件来恢复

如果 coredns 被误删了,可以通过重新应用 coredns 的 Deployment 或 DaemonSet 配置文件来恢复。以下是恢复 coredns 的步骤: 1. 下载 coredns 配置文件 你可以从 Kubernetes 的官方 GitHub 仓库下载 coredns 的配置文件。以下是下载并应用配置文件的步…

Android开机动画,framework修改Bootanimation绘制文字。

文章目录 Android开机动画,framework修改Bootanimation动画绘制文字。 Android开机动画,framework修改Bootanimation动画绘制文字。 frameworks/base/cmds/bootanimation/bootanimation.cpp 绘制时间的一个方法 // We render 12 or 24 hour time. void…

使用Landsat的NDVI和NDWI阈值法土地分类

目录 分类效果源代码分类效果 创建一个包含多个层的影像合成:水体(NDWI > 0.5),植被(NDVI > 0.2),阴影区域的裸地(bare2但不包括bare1),和其他裸地(bare1)。然后,使用mosaic()方法合并这些层,并用clip(hh)方法裁剪到研究区域的范围。 源代码 var hh = ee.…

linux 内核映像差异介绍:vmlinux、zImage、zbImage、image、uImage等

一、背景 Linux内核是整个Linux操作系统的核心部分,它是一个负责与硬件直接交互的软件层,并且提供多种服务和接口,让用户程序能够方便地使用硬件资源。 当我们编译自定义内核时,可以将其生成为以下内核映像之一:vmli…

【Matplotlib作图-3.Ranking】50 Matplotlib Visualizations, Python实现,源码可复现

目录 03 Ranking 3.0 Prerequisite 3.1 有序条形图(Ordered Bar Chart) 3.2 棒棒糖图(Lollipop Chart) 3.3 点图(Dot Plot) 3.4 斜率图(Slope Chart) 3.5 杠铃图(Dumbbell Plot) References 03 Ranking 3.0 Prerequisite Setup.py # !pip install brewer2mpl import n…

短视频拍摄的几个必要手法!

如果说视频脚本是制作视频的基础,那么视频拍摄则是视频制作的关键。有了清晰稳定的视频素材,我们才能创作出清晰完整的视频画面。 那么如何拍摄出一个优质清晰稳定的视频画面呢?接下来带大家来学习下视频拍摄的五大技巧。 一、构图是关键 …

深度学习优化技巧

深度学习优化技巧 导语参数更新SGDMomentumAdaGradAdam方法比较 权重初始化关于置0隐藏层激活值分布ReLU权重初值权重比较 Batch Normalization处理过拟合权值衰减Dropout 超参数验证验证数据最优化和实现 总结参考文献 导语 在深度学习中,除了上一章所涉及到的反向…

Kubernetes Pod控制器

一.Pod控制器基本内容 1.定义 Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略…

光纤宽带和ADSL宽带(电话线上网时代)

一、ADSL宽带(电话线上网时代) ADSL技术是一种不对称数字用户线实现宽带接入互连网的技术,ADSL作为一种传输层的技术,充分利用现有的铜线资源,在一对双绞线上提供上行640kbps下行8Mbps的带宽,从而克服了传统用户在最后一公里的瓶颈…

鸿蒙卷起来了!什么是ArkTS?ArkUI?

最近消息出来了!纯血鸿蒙即将在六月底发布,市场关于鸿蒙应用开发很火,一些公司企业对鸿蒙开发技术人员更是开出惊人的高薪资。 如果你想要学习鸿蒙应用开发,需要从鸿蒙相关的ArkTS语言开始进入。关于鸿蒙的ArkTS语言,我…

微服务:Rabbitmq的WorkQueue模型的使用、默认消费方式(消息队列中间件)

文章目录 WorkQueue模型控制预取消息个数 WorkQueue模型 当然,一个队列,可以由多个消费者去监听。 来实现一下. 生产者: Testpublic void testWorkQueue() throws InterruptedException {// 队列名称String queueName "simple.queue…

UUID 的用户体验

UUID 的用户体验 唯一标识符(UUID)在所有应用程序中都起着至关重要的作用,从用户认证到资源管理。虽然使用标准的 UUID 可以满足所有的安全需求,但我们可以为用户做很多改进。 基础知识:确保全局唯一性 唯一标识符对…

UR机器人通信汇总

文章目录 一、概述二、UR机器人通信2.1UR通信协议2.2 UR通信端口 三、UR机器人通信端口类型3.1 Modbus TCP端口(502端口)3.2 Dashboard端口(29999端口)3.3 上位机编程端口(30001/30002/30003端口)3.3.1 URS…

C基础-标准库上

下:http://t.csdnimg.cn/LXa0J C 标准库是一组 C 内置函数、常量和头文件&#xff0c;比如 <stdio.h>、<stdlib.h>、<math.h>&#xff0c;等等。 目录 一. assert.h 二. ctype.h 三. errno.h 四. float.h 五.limits.h 六. locale.h 一. assert.h 源码…

Go语言垃圾回收(GC原理)

1. GC回收机制 1.1 V1.3标记清除法 (1)概述 1.STW暂停 STW(暂停业务逻辑,找出可达和不可达对象) 2.对可达对象做上标记 标记完成之后,对象5和对象6不可达,被GC清除.之后STW结束. (2).缺点 STW :让程序暂停,程序出现卡顿.标记需要扫描整个heap.清除数据会产生heap碎片. 1.…

【linux软件基础知识】与调度相关的进程描述符

进程描述符 每个进程描述符都包括几个与调度相关的字段,如下代码所示: struct thread_struct {unsigned long rsp0;unsigned long rsp;unsigned long userrsp; /* Copy from PDA */ unsigned long fs;unsigned