C/C++中使用MYSQL

news/2024/11/14 5:28:14/

首先要保证下载好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/news/1546504.html

相关文章

learn-F12 Performance(性能)前端性能分析(LCP,CLS,INP)

1.前言 在浏览器开发者工具&#xff08;F12&#xff09;中&#xff0c;本地指标&#xff08;Local Metrics&#xff09;包括LCP&#xff08; Largest Contentful Paint&#xff09;、CLS&#xff08; Cumulative Layout Shift&#xff09;和INP&#xff08; Interaction to Nex…

kafka夺命连环三十问(16-22)

16、kafka是如何做到高效读写 1&#xff0c;kafka本身是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高 2&#xff0c;读数据采用稀疏索引&#xff0c;可以快速定位要消费的数据 3&#xff0c;顺写磁盘 4&#xff0c;页缓存零拷贝技术 17、Kafka集群中数据的存储…

navicat pg库安装mysql fdw 外表扩展

在Windows上手动安装mysql_fdw&#xff08;MySQL Foreign Data Wrapper&#xff09;通常涉及一系列步骤&#xff0c;包括下载源码、编译、配置和测试。以下是一个详细的指南&#xff1a; 一、下载mysql_fdw源码 访问mysql_fdw的GitHub发布页面&#xff0c;选择最新版本的源码…

如何使用腾讯云GPU云服务器自建一个简单的类似ChatGPT、Kimi的会话机器人

如何使用腾讯云GPU云服务器自建一个简单的类似ChatGPT、Kimi的会话机器人 一、选择云服务器 1.申请云服务器 建议云服务器使用按量付费&#xff0c;按小时算还是非常便宜的。 硬件配置&#xff1a; 系统&#xff1a;ubuntu&#xff0c;20.04 系统盘&#xff1a;150G GPU…

【ET8框架进阶】HybridCLR打包丢失元方法问题MissingMethodException:生成LinkXml增加元方法

问题描述 HybridCLR自带的GenerateLinkXml,丢失部分原方法 MissingMethodException: Default constructor not found for type YooAsset.FileGeneralRequestat System.RuntimeType.CreateInstanceMono (System.Boolean nonPublic, System.Boolean wrapExceptions) [0x00000]…

浔川 AI 翻译 v5.0 上线时间公告(已公布!)

亲爱的用户们&#xff1a; 在此向大家隆重宣布&#xff0c;备受期待的浔川 AI 翻译 v5.0 版本将于 11 月 16 日正式上线啦&#xff01; 我们的研发团队全力以赴&#xff0c;精心打磨这一全新版本。在这个过程中&#xff0c;运用了一系列先进技术&#xff0c;对翻译算法做了深度…

mysql占用内存过大问题排查

如果 MySQL 占用内存过高&#xff0c;可以按照以下步骤进行排查&#xff1a; 一、检查 MySQL 配置参数 查看 innodb_buffer_pool_size&#xff1a; 这个参数决定了 InnoDB 存储引擎缓冲池的大小&#xff0c;它会占用大量内存。如果设置得过大&#xff0c;可能导致内存占用过高…

996引擎 - 活捉NPC

996引擎 - 活捉NPC 引擎触发 - 引擎事件(QF)事件处理模块 GameEvent测试文件参考资料 引擎触发 - 引擎事件(QF) cfg_game_data 配置 ShareNpc1 可以将QM和机器人的触发事件全部转到 QF 引擎触发是通用的,TXT的所有触发转换成小写后在LUA中就可使用,如说明书中缺省可反馈至对接群…