C/C++中使用MYSQL

ops/2024/11/19 3:10:20/

首先要保证下载好mysql的库和头文件,头文件在/usr/include/mysql/目录下,库在/usr/lib64/mysql/目录下:

一般情况下,在我们安装mysql的时候,这些都提前配置好了,如果没有就重装一下mysql。如果重装mysql还是没有就再装一下mysql-devel:

yum install -y mysql-devel;

 这些都准备好之后,就可以开始在c语言中使用mysql了!

初始化mysql

头文件包含<mysql/mysql.h>

参数传nullptr即可

接口的返回值MYSQL*是一个结构体指针,包含很多mysql的属性,这个值在后面许多接口中都要作为参数传递,所以很重要!如果初始化mysql失败就会返回nullptr

初始化mysql一定会申请空间,所以每次使用完mysql都要手动释放空间:

连接mysql

这个接口参数较多,但都是在登陆mysql的信息:

第一个参数就是初始化mysql的返回值

第二个参数是登录的主机或ip

第三个参数是登录用户

第四个参数是密码

第五个参数是要使用的数据库

第六个参数是mysqld运行的端口号,一般是3306,可以在/etc/my.cnf中设置

第七个参数一般传nullptr,第八个参数一般传0

如果连接成功,返回值与第一个参数相同;如果连接失败,返回空指针

设置字符集

如果我们要插入的数据是中文,客户端使用的字符集和服务端不同,就会出现乱码的问题。

成功返回0,不成功返回非0

发送mysql命令

 

第二个参数是mysql的命令,命令末尾可以不带

成功返回0,不成功返回非0

对于create,insert,delete,update,drop等命令,执行后不需要返回数据,所以直接调用这个接口即可;但是对于select命令,需要返回数据,就需要其他接口配合使用了

获取数据——mysql_store_result

这个接口可以获取读取结果,MYSQL结构体中有数据的缓冲区,这个接口就是将其缓冲区的数据放到MYSQL_RES结构体中。

创建MYSQL_RES结构体也需要分配空间,使用结束后需要回收:

从MYSQL_RES中获取数据的行数——mysql_num_rows

从MYSQL_RES中获取数据的列数——mysql_num_fields

从MYSQL_RES中获取列名——mysql_fetch_fields

 这个接口的参数是上一个接口的返回值。

返回值是所有列的结构体的数组,列的结构体是存储列属性的,其中有一个name对象就是列的名称。

 从MYSQL_RES中获取单行数据——mysql_fetch_row

可以将一行数据的多个列想象成多个char*类型的数据,那么这个MYSQL_ROW就是char**,只需像数组一样即可访问行数据。

将上面四个接口的返回值配合循环的使用就可以打印出select数据的结果了。

例子

#include <iostream>
#include <mysql/mysql.h>using namespace std;
int main()
{//初始化mysqlMYSQL* my = mysql_init(nullptr);if(my == nullptr) {cout << "init fail" << endl;return 1;}//连接mysqlmy = mysql_real_connect(my, "127.0.0.1", "ly", "123123", "test1", 3306, nullptr, 0);if(my == nullptr) {cout << "connect fail" << endl;return 2;}//设置字符集mysql_set_character_set(my, "utf8");//发出命令if(mysql_query(my, "create table info(id int primary key, name varchar(32), phone_num char(11) unique)")){cout << "create fail" << endl;}if(mysql_query(my, "insert into info (id, name, phone_num) values (1, 'Tom', '12345678999')")){cout << "insert fail" << endl;}if(mysql_query(my, "insert into info (id, name, phone_num) values (2, 'Peter', '12345678911')")){cout << "insert fail" << endl;}// if(mysql_query(my, "drop table info"))// {//     cout << "insert fail" << endl;// }if(mysql_query(my, "select * from info")){cout <<  "select fail" << endl;}MYSQL_RES* res = mysql_store_result(my);MYSQL_FIELD* colname = mysql_fetch_fields(res);int row = mysql_num_rows(res);int col = mysql_num_fields(res);//打印列名for(int i = 0; i < col; i++){cout << colname[i].name << '\t';}cout << endl;//打印数据for(int i = 0; i < row; i++){MYSQL_ROW rowdata = mysql_fetch_row(res);for(int j = 0; j < col; j++){cout << rowdata[j] << '\t';}cout << endl;}//回收数据结构体mysql_free_result(res);//回收mysqlmysql_close(my);
}

编译代码时必须说明库的路径,给出库名,在编译命令加上如下选项:

-L /usr/lib64/mysql -lmysqlclient;


http://www.ppmy.cn/ops/134847.html

相关文章

拆解测试显示Mac Mini (2024)固态硬盘并未锁定 互换硬盘后仍可使用

此前已经有维修达人尝试将 Mac Mini (2024) 固态硬盘上的 NAND 闪存拆下并替换实现扩容&#xff0c;例如可以从 256GB 扩容到 2TB。虽然接口类似于 NVMe M.2 SSD 但直接安装普通硬盘是无效的&#xff0c;苹果仍然通过某种机制检测硬盘是否能够兼容。 不过知名拆解网站 iFixit 的…

【大数据学习 | flume】flume的概述与组件的介绍

1. flume概述 Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去&#xff0c;比如说送到HDFS、Hbase&#xff0c;简单来说flume就是收集日志的。 Flume两个版本区别&#xff1a; ​ 1&…

python核心语法

目录 核⼼语法第⼀节 变量0.变量名规则1.下⾯这些都是不合法的变量名2.关键字3.变量赋值4.变量的销毁 第⼆节 数据类型0.数值1.字符串2.布尔值(boolean, bool)3.空值 None 核⼼语法 第⼀节 变量 变量的定义变量就是可变的量&#xff0c;对于⼀些有可能会经常变化的数据&#…

java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程

文章目录 PC Register堆虚拟机栈方法区(Metaspace元空间双亲委派机制类加载器 类装载的执行过程 PC Register 程序计数器&#xff08;Program Counter Register&#xff09;是 Java 虚拟机&#xff08;JVM&#xff09;中的一个组件&#xff0c;它在 JVM 的内存模型中扮演着非常…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17&#xff0c;本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

SQL注入注入方式(大纲)

SQL注入注入方式&#xff08;大纲&#xff09; 常规注入 通常没有任何过滤&#xff0c;直接把参数存放到SQL语句中。 宽字节注入 GBK 编码 两个字节表示一个字符ASCII 编码 一个字节表示一个字符MYSQL默认字节集是GBK等宽字节字符集 原理&#xff1a; 设置MySQL时错误配置…

java xml 文本解析

示例文本 <Message><MessageName>time_request</MessageName><Timestamp>20220217165432906359</Timestamp><Body><EQPID>CMMAB01-DTP01</EQPID></Body> </Message>示例代码 import org.w3c.dom.Document; impo…

C#编程:优化【性别和成绩名次】均衡分班

标题 C#编程&#xff0c;实现&#xff08;男女和成绩&#xff09;均衡分班 正文 上一篇用ExceVBA完成的分班&#xff0c;请看文章 ExcelVBA代码实现按性别和成绩名次均衡分班 网友提出问题用VbA对班级学生随机分组&#xff0c;考虑男女人数和考试成绩均衡 一、需求分析 用户需要…