C/C++中使用MYSQL

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

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

相关文章

华为ensp实验二--mux vlan的应用

一、实验内容 1.实验要求&#xff1a; 在交换机上创建三个vlan&#xff0c;vlan10、vlan20、vlan100&#xff0c;将vlan100设置为mux-vlan&#xff0c;将vlan10设置为group vlan&#xff0c;将vlan20设置为separate vlan&#xff1b;实现vlan10的设备在局域网内可以进行互通&…

Redis知识分享(三)

目录 前言 七、事务管理 7.1事务中的异常处理 八、订阅发布 8.1概述 ​8.2.Redis针对发布订阅相关指令 九、主从复制 9.1主从复制概述 9.2.主从复制的用处 9.3主从复制实现原理 ​9.3.1.psync指令 9.3.2.复制偏移量 9.3.3复制积压缓冲区&节点ID 前言 今天…

Java基础-组件及事件处理(中)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 BorderLayout布局管理器 说明&#xff1a; 示例&#xff1a; FlowLayout布局管理器 说明&#xff1a; …

【论文阅读】主动推理:作为感知行为的理论

文章目录 主动推理&#xff1a;作为感知行为的理论摘要1.引言2. 主动推理的概念和历史根源3. 主动推理的规范视角—以及它的发展历程 未完待续 主动推理&#xff1a;作为感知行为的理论 Active inference as a theory of sentient behavior 摘要 这篇文章综述了主动推理的历…

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何&#xff0c;建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create &#xff1a;创建conda虚拟环境&#xff0c; -n &#xff1a;给虚拟环境命名的…

React--》如何高效管理前端环境变量:开发与生产环境配置详解

在前端开发中&#xff0c;如何让项目在不同环境下表现得更为灵活与高效&#xff0c;是每个开发者必须面对的挑战&#xff0c;从开发阶段的调试到生产环境的优化&#xff0c;环境变量配置无疑是其中的关键。 env配置文件&#xff1a;通常用于管理项目的环境变量&#xff0c;环境…

SpringSecurity+jwt+captcha登录认证授权总结

SpringSecurityjwtcaptcha登录认证授权总结 版本信息&#xff1a; springboot 3.2.0、springSecurity 6.2.0、mybatis-plus 3.5.5 认证授权思路和流程&#xff1a; 未携带token&#xff0c;访问登录接口&#xff1a; 1、用户登录携带账号密码 2、请求到达自定义Filter&am…

计算机视觉和机器人技术中的下一个标记预测与视频扩散相结合

一种新方法可以训练神经网络对损坏的数据进行分类&#xff0c;同时预测下一步操作。 它可以为机器人制定灵活的计划&#xff0c;生成高质量的视频&#xff0c;并帮助人工智能代理导航数字环境。 Diffusion Forcing 方法可以对嘈杂的数据进行分类&#xff0c;并可靠地预测任务的…

2024-11-17 -MATLAB三维绘图简单实例

1. x -1:0.05:1; y x; [X, Y] meshgrid(x, y); f (X, Y) (sin(pi * X) .* sin(pi * Y)) .^ 2.*sin(2.*X2.*Y); mesh(X, Y, f(X, Y)); % 调用函数f并传递X和Y xlabel(X-axis); ylabel(Y-axis); zlabel(Z-axis); title(Surface Plot of (sin(pi * X) .* sin(pi * Y)) .^ 2.*…

WebAssembly在桌面级应用开发中的探索与实践

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 WebAssembly在桌面级应用开发中的探索与实践 WebAssembly在桌面级应用开发中的探索与实践 WebAssembly在桌面级应用开发中的探索…

第二十一周学习周报

目录 摘要Abstract1. LSTM原理2. LSTM反向传播的数学推导3. LSTM模型训练实战总结 摘要 本周的学习内容是对LSTM相关内容的复习&#xff0c;LSTM被设计用来解决标准RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。LSTM通过引入门控机制来控制信息的流动&#xff0c;从而…

《Spring 基础之 IoC 与 DI 入门指南》

一、IoC 与 DI 概念引入 Spring 的 IoC&#xff08;控制反转&#xff09;和 DI&#xff08;依赖注入&#xff09;在 Java 开发中扮演着至关重要的角色&#xff0c;是提升代码质量和可维护性的关键技术。 &#xff08;一&#xff09;IoC 的含义及作用 IoC 全称为 Inversion of…

Vulnhub靶场案例渗透[9]- HackableIII

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. 敏感数据获取5. 获取shell6. 提权6.1 敏感信息获取6.2 lxd提权 一、靶场搭建 1. 靶场描述 Focus on general concepts about CTF…

抖音热门素材去哪找?优质抖音视频素材网站推荐!

是不是和我一样&#xff0c;刷抖音刷到停不下来&#xff1f;越来越多的朋友希望在抖音上创作出爆款视频&#xff0c;但苦于没有好素材。今天就来推荐几个超级实用的抖音视频素材网站&#xff0c;让你的视频内容立刻变得高大上&#xff01;这篇满是干货&#xff0c;直接上重点&a…

如何轻松导出所有 WordPress URL 为纯文本格式

作为一名多年的 WordPress 使用者&#xff0c;我深知管理一个网站的复杂性。从迁移网站、设置重定向到整理内容结构&#xff0c;每一步都需要精细处理。而拥有所有 URL 的清单&#xff0c;不仅能让这些工作变得更加简单&#xff0c;还能为后续的管理提供极大的便利。其实&#…

vue项目使用eslint+prettier管理项目格式化

代码格式化、规范化说明 使用eslintprettier进行格式化&#xff0c;vscode中需要安装插件ESLint、Prettier - Code formatter&#xff0c;且格式化程序选择为后者&#xff08;vue文件、js文件要分别设置&#xff09; 对于eslint规则&#xff0c;在格式化时不会全部自动调整&…

Ubuntu 18.04 配置sources.list源文件(无法安全地用该源进行更新,所以默认禁用该源)

如果你 sudo apt update 时出现诸如 无法安全地用该源进行更新&#xff0c;所以默认禁用该源 的错误&#xff0c;那就换换源吧&#xff0c;链接&#xff1a; https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/ 注意版本&#xff1a; 修改源文件&#xff1a; sudo nano /etc…

5. langgraph中的react agent使用 (从零构建一个react agent)

1. 定义 Agent 状态 首先&#xff0c;我们需要定义 Agent 的状态&#xff0c;这包括 Agent 所持有的消息。 from typing import (Annotated,Sequence,TypedDict, ) from langchain_core.messages import BaseMessage from langgraph.graph.message import add_messagesclass …

【网络】什么是交换机?switch

交换机&#xff08;Switch&#xff09;意为“开关”&#xff0c;是一种用于电&#xff08;光&#xff09;信号转发的网络设备。以下是关于交换机的详细解释&#xff1a; 一、交换机的基本定义 功能&#xff1a;交换机能为接入交换机的任意两个网络节点提供独享的电信号通路&am…

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…