MySQL -- MySQL Connection C中的API介绍

MySQL – MySQL Connection C中的API介绍

文章目录

  • MySQL -- MySQL Connection C中的API介绍
  • 一、接口介绍
    • 1.初始化mysql_init()
    • 2. 链接数据库mysql_real_connect
    • 3.下发mysql命令mysql_query
    • 4.获取执行结果mysql_store_result
    • 5.获取结果行数和列数
    • 6.获取列名mysql_fetch_fields
    • 7.获取结果内容mysql_fetch_row
    • 8.释放结果空间mysql_free_result
    • 9.关闭mysql链接mysql_close


一、接口介绍

1.初始化mysql_init()

MYSQL *mysql_init(MYSQL *mysql);

如:

MYSQL *mfp = mysql_init(NULL)

2. 链接数据库mysql_real_connect

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

MYSQL *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);

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

mysql_set_character_set(myfd, "utf8");

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

3.下发mysql命令mysql_query

int mysql_query(MYSQL *mysql, const char *q);

第一个参数上面已经介绍过,第二个参数为要执行的sql语句,如“select * from table”

4.获取执行结果mysql_store_result

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

MYSQL_RES *mysql_store_result(MYSQL *mysql);

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

5.获取结果行数和列数

my_ulonglong mysql_num_rows(MYSQL_RES *res);
unsigned int mysql_num_fields(MYSQL_RES *res);

6.获取列名mysql_fetch_fields

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

如:

int fields = mysql_num_fields(res);
MYSQL_FIELD *field = mysql_fetch_fields(res);
int i = 0;
for(; i < fields; i++){
cout<<field[i].name<<" ";
}
cout<<endl;

7.获取结果内容mysql_fetch_row

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

获取一行数据,MYSQL_ROW其实就是char **,相当于一个char* 的数组,数组元素是每一列的内容;

如:

i = 0;
MYSQL_ROW line;
for(; i < nums; i++){
line = mysql_fetch_row(res);
int j = 0;
for(; j < fields; j++){
cout<<line[j]<<" ";
}
cout<<endl;
}

8.释放结果空间mysql_free_result

void mysql_free_result(MYSQL_RES *res);

释放查询结果空间,不能直接使用free释放空间;

9.关闭mysql链接mysql_close

void mysql_close(MYSQL *sock);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0412备战蓝桥杯,图论复习

1.朴素dijkstra #include<algorithm> #include<iostream> #include<cstring> #include<queue> #include<cmath>using namespace std; const int N 510; int n,m; int g[N][N],dist[N]; bool st[N];int dij(){memset(dist,0x3f,sizeof dist);di…

内存函数memcpy、mommove、memset、memcmp

1、memcpy函数 描述&#xff1a; C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。 声明&#xff1a; void *memcpy(void *str1, const void *str2, size_t n)参数&#xff1a; str1 -- 指向用于存储复制内容的目标…

【Redis实战避坑指南】深入剖析缓存雪崩、缓存穿透与缓存击穿:理解原理,规避风险

Redis作为高性能的键值存储系统&#xff0c;因其出色的读写性能和内存数据结构&#xff0c;被广泛应用于缓存场景。然而&#xff0c;在实际使用过程中&#xff0c;如果不妥善处理&#xff0c;可能会遭遇缓存雪崩、缓存穿透与缓存击穿等现象&#xff0c;严重影响系统的稳定性和性…

【电控笔记0】稳定度判断

简要概括 现控:原理虚轴,稳定度越高 自控:相位裕度PM 增益裕度GM 开环传函 不稳定条件判断

期望阻抗(Zd/s或Yd*s)的nyquist、bode与rlocus

在机器人控制领域中&#xff0c;针对具体的阻抗参数特性&#xff08;如质量、阻尼和刚度&#xff09;&#xff0c;Nyquist图、Bode图和根轨迹&#xff08;rlocus&#xff09;可以提供深入的分析和设计工具。 Nyquist图&#xff1a; 应用于阻抗参数&#xff1a;在机器人控制中&…

股票战法课程之交易系统

文章目录 1. 为什么要建立自己的交易系统2. 一个朋友的交易体系分享2.1 开仓原则2.2 计算盈亏比2.3 第三原则&#xff1a;资金管理原则2.4 持股原则2.5 技术指标 3. 作者本人的交易系统 1. 为什么要建立自己的交易系统 有稳定的交易系统&#xff0c;会让人很清晰的 知道什么样…

docker pull镜像的时候指定arm平台

指定arm平台 x86平台下载arm平台的镜像包 以mysql镜像为例 docker pull --platform linux/arm64 mysqldocker images查看镜像信息 要查看Docker镜像的信息&#xff0c;可以使用docker inspect命令。这个命令会返回镜像的详细信息&#xff0c;包括其元数据和配置。 docker i…

Nginx反向代理到访问者机器上(后端调试)

一、起因 因一名后端开发&#xff0c;不想使用postman等工具进行接口调试&#xff0c;因为web系统需要经过N多步骤的前置动作&#xff0c;不能保证参数的有效性&#xff0c;因此&#xff0c;需要直接点击web系统&#xff0c;触发本地后端代码。 但是&#xff0c;总不可能动不动…

Fast-lio2运行时如何显示轨迹线

修改对应设备的.yaml文件&#xff0c;以velodyne为例&#xff1a; 将 path_en参数改为true即可&#xff0c;运行其他设备&#xff0c;修改对应的参数

四、SpringBoot3 整合 Druid 数据源

本章概要 创建程序引入依赖启动类配置文件编写编写 Controller启动测试问题解决 4.1 创建程序 4.2 引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://ww…

【C++ STL序列容器】deque 双端队列

文章目录 【 1. 基本原理 】【 1. deque 的创建 】1.1 创建一个空的 deque1.2 创建一个 n 个默认值的 deque1.3 创建一个 n 个指定值的 deque1.4 通过一个 deque 初始化另一个 deque1.5 通过基础容器来初始化 queue 容器适配器 【 3. deque 支持的成员函数 】 【 1. 基本原理 】…

不惑之年,反思我如何成为一个程序员

不惑之年&#xff0c;反思我如何成为一个程序员 文章目录 不惑之年&#xff0c;反思我如何成为一个程序员01/偶然掉入码河02/现实撕碎理想03/发展选择方向04/时代成就向往05/幸运装饰未来 在这个充满生机与希望的季节&#xff0c;博主有幸收到一家国企邀约面试&#xff0c;并顺…

通俗易懂HTTP和HTTPS区别

HTTP&#xff1a;超文本传输协议&#xff0c;它是使用一种明文的方式发送我们的内容&#xff0c;没有任何的加密&#xff0c;例如我们要在网页上输入账号密码&#xff0c;如果使用HTTP协议&#xff0c;账号密码就可能会被暴露&#xff0c;默认端口是80. HTTPS&#xff1a;是HT…

护眼台灯品牌哪个好?2024五大护眼台灯排行榜分享

​护眼台灯作为家庭中常见的照明工具&#xff0c;其存在几乎成为了现代生活的标配。家长们往往会为孩子购置一台&#xff0c;供学习和阅读使用&#xff1b;同时&#xff0c;它也是学生和办公人员在夜晚工作学习的必备之物。然而&#xff0c;市面上的一些普通台灯可能存在着种种…

Springboot使用教程

二、配置文件 SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1b; •application.properties •application.yml 1.配置文件的作用&#xff1a; 修改SpringBoot自动配置的默认值&#xff1b;SpringBoot在底层都给我们自动配置好&#xff1b; Y…

redis分桶路由方案及代码(项目功能模拟)

项目背景&#xff1a;把黑白名单数据&#xff0c;通过hash分桶路由的方式存储在redis里面 项目为短信发送平台&#xff0c;以下是黑白名单相关介绍&#xff1a; 黑名单包括三类&#xff1a; 第一类&#xff0c;平台黑名单 此类是指的平台设置的黑名单手机号&#xff0c;设置了以…

OpenHarmony的C/C++三方库的适配

简介 本仓库主要用于存放已经适配OpenHarmony的C/C三方库的适配脚本和OpenHarmony三方库适配指导文档、三方库适配相关的工具。 三方库适配 本仓库的三方库主要是通过OpenHarmony SDK进行交叉编译适配的&#xff0c;并集成到应用端进行使用。 在使用OpenHarmony的SDK进行交…

智能合约:未来数字经济的基石

智能合约是一种自动执行交易的计算机协议&#xff0c;它以代码形式规定了交易双方的权利和义务&#xff0c;具有高度的可靠性和安全性。随着数字经济的发展&#xff0c;智能合约的重要性日益凸显&#xff0c;将成为未来数字经济的基石。 首先&#xff0c;智能合约在金融领域的应…

Java常见API

Java常见API Math 在Java中&#xff0c;Math是一个包含了许多数学函数和常量的类&#xff0c;它属于java.lang包&#xff0c;因此在使用时不需要显式地导入。Math类提供了许多静态方法来进行数学运算&#xff0c;比如三角函数、对数函数、指数函数等。 Math类的作用&#xf…

【目标检测数据集】城市街道垃圾堆相关数据集

一、GarbageOverflow&#xff1a;城市街道垃圾堆数据集 该垃圾堆数据集是通过爬虫从网上进行爬取得到的&#xff0c;一共包含1188张图片&#xff0c;有2个类别&#xff0c;分别为[overflow, No Overflow]&#xff0c;两个标签的数量分别为1734个标签和414个标签。部分数据集及…