c++使用mysqlclient库开发mysql

news/2024/12/23 4:21:37/

使用libmysqlclient库对mysql进行c++开发

安装

sudo apt update && sudo apt install libmysqlclient-dev -y

封装客户端

一般都是封装一个客户端类进行开发,如下的mysql.h:

#pragma once
#include <mysql/mysql.h>
#include <string>
#include <iostream>// 数据库操作类
class MySQL {
public:MySQL(); // 初始化数据库连接资源~MySQL(); // 释放数据库连接资源bool connect(); // 连接数据库bool update(std::string sql); // 更新(insert, delete, update都是这个接口)MYSQL_RES *query(std::string sql); // 查询操作MYSQL* getConnection();     // 获取连接
private:MYSQL *_conn; //一条连接
};

mysql.cpp如下:

#include "mysql.h"// 数据库配置信息
static std::string server = "127.0.0.1";
static uint16_t port = 3306;
static std::string user = "root";
static std::string password = "123456";
static std::string dbname = "chat";// 初始化数据库连接资源
MySQL::MySQL() {_conn = mysql_init(nullptr);
}// 释放数据库连接资源
MySQL::~MySQL() {if (_conn) {mysql_close(_conn);}
}// 连接数据库
bool MySQL::connect() {MYSQL *p = mysql_real_connect(_conn, server.c_str(), user.c_str(), password.c_str(), dbname.c_str(), port, nullptr, 0);if (p) {// C和C++代码默认的编码字符是ASCII,如果不设置,从MySQL上拉下来的中文会乱码mysql_query(_conn, "set names gbk");std::cout << "connect mysql success!" << std::endl;} else {std::cout << "connect mysql failed!" << std::endl;}return p; //空不就是false吗
}// 更新(insert,delete,update都是这个接口)
bool MySQL::update(std::string sql) {if (mysql_query(_conn, sql.c_str())) {std::cout << __FILE__ << ":" << __LINE__ << ":" << sql << "更新失败!" << std::endl;return false;}std::cout << __FILE__ << ":" << __LINE__ << ":" << sql << "更新成功!" << std::endl;return true;
}// 查询操作
MYSQL_RES *MySQL::query(std::string sql) {if (mysql_query(_conn, sql.c_str())) {std::cout << __FILE__ << ":" << __LINE__ << ":" << sql << "查询失败!" << std::endl;return nullptr;}return mysql_use_result(_conn);
}// 获取连接
MYSQL* MySQL::getConnection() {return _conn;
}

使用示例

#include "mysql.h"
#include <iostream>int main() {MySQL mysql;if (mysql.connect()) {char sql[1024] = {0};mysql.update("insert into users values(4, \"lao liu\", \"141277@qq.com\", 20)");} 
}

编译:

g++ 1.cpp mysql.cpp -lmysqlclient

http://www.ppmy.cn/news/1453321.html

相关文章

个人直播/流媒体服务解决方案实践

1. 说明 - 在本地局域网建立流媒体服务&#xff0c;并发布到公网服务器供终端&#xff08;机顶盒/移动设备&#xff09;订阅浏览 - 整个方案费用&#xff1a;本地硬件&#xff0c;本地上网费&#xff0c;公网服务器费, 域名费 1.1 拓扑结构图 其中&#xff1a; 流媒体服务器…

H.265码流解析

这一篇内容旨在对H.265码流中的一些概念做简单了解,部分概念与H.264相同,本篇中将不再重复。 1、NALU H.265(HEVC)码流的NALU结构和AVC有一些不同,属于增强版,HEVC NALU结构如下: NALU Header: Forbidden_zero_bit:1位,必须为0,如果不是则表示NALU非法;Nal_unit_t…

Nodejs-异步并发控制

异步并发控制 在 node 中可以利用异步发起并行调用。但是如果并发量过大&#xff0c;就会导致下层服务器吃不消。 bagpipe 解决方案 解决方案 通过一个队列来控制并发量如果当前活跃的异步调用小于限定值&#xff0c;从队列中取出执行如果活跃调用达到限定值&#xff0c;调…

Stable Diffusion webUI 最全且简单配置指南

Stable Diffusion webUI 配置指南 本博客主要介绍部署Stable Diffusion到本地&#xff0c;生成想要的风格图片。 文章目录 Stable Diffusion webUI 配置指南1、配置环境&#xff08;1&#xff09;pip环境[可选]&#xff08;2&#xff09;conda环境[可选] 2、配置Stable Diffu…

QT中的容器

Qt中的容器 关于Qt中的容器类&#xff0c;下面我们来进行一个总结&#xff1a; Qt的容器类比标准模板库&#xff08;STL&#xff09;中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的&#xff0c;而且他们进行了速度和存储的优化&#xff0c;因此可以减少可…

【QT教程】QT6与C++17

QT6与C17 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费QT视频…

排序算法之希尔排序(缩小增量排序)

希尔排序是插入排序的优化&#xff0c;如果不了解插入排序可以看排序算法之插入排序-CSDN博客这篇博客&#xff0c;希尔排序算法通过对原始数据集使用 gap 分组的方法&#xff0c;先将数据分组进行插入排序&#xff0c;随着排序的进行&#xff0c;逐渐减小 gap 的值&#xff0c…

ThreeJS:纹理的颜色空间

色彩空间Color Space 在ThreeJS中&#xff0c;纹理的colorSpace属性用于定义文里的颜色空间。 颜色空间是一个用于描述颜色的数学模型&#xff0c;在现实生活中&#xff0c;人眼可以观察到无数种颜色&#xff0c;而颜色空间就是用来描述这些颜色的一个方法&#xff0c;不同的颜…