c++使用mysqlclient库开发mysql

embedded/2024/9/24 0:20:24/

使用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/embedded/31609.html

相关文章

【软件工程】概要设计

目录 前言软件设计简介概要设计模块化模块化的评价耦合内聚 面向对象设计原则Liskov替换原则&#xff08;LSP&#xff09;开放-封闭原则&#xff08;OCP&#xff09;单一职责原则&#xff08;SRP&#xff09;接口隔离原则&#xff08;ISP&#xff09;依赖倒置原则&#xff08;D…

什么是g++-arm-linux-gnueabihf

2024年5月3日&#xff0c;周五晚上 g-arm-linux-gnueabihf 是针对 ARM 架构&#xff08;ARMv7 和 ARMv8&#xff09;的 Linux 系统开发的 GNU C 编译器套件&#xff0c;可以在 x86 或 x86_64 架构的主机上使用&#xff0c;用于交叉编译 ARM Linux 应用程序和库。 与 gcc-arm-l…

ES集群分布式查询原理

集群分布式查询 elasticsearch的查询分成两个阶段&#xff1a; scatter phase&#xff1a;分散阶段&#xff0c;coordinating node会把请求分发到每一个分片gather phase&#xff1a;聚集阶段&#xff0c;coordinating node汇总data node的搜索结果&#xff0c;并处理为最终结…

HCIA-题目解析1

0x00 前言 遇到这样一道题,这种题目对于我来说还是比较复杂的,所以记录一下。主要还是和熟练度有关系。 0x01 题目 路由器RouterID邻居关系如下,下列说法正确的是 A:本路由器和Router-lD为10.0.3.3的路由器不能直接交换链路状态信息 B:DR路由器的Router-lD为10.0.1.2 C:…

文件同步--Resilio Sync

近期有很多文本处理工作&#xff0c;每次通过社交软件发来发去&#xff0c;比较麻烦&#xff0c;还是希望能够自动同步&#xff0c;方便快捷&#xff0c;然后师弟就给我推荐了Resilio Sync&#xff0c;目前配置完毕&#xff0c;使用下来感受良好&#xff0c;mark一下。 特点 跨…

Linux内核--设备驱动(四)基础通信接口整理

目录 一、引言 二、I2C ------>2.1、虚拟总线 ------>2.2、I2C适配器序列号指定 ------>2.3、I2C驱动的注册 ------>2.4、I2C设备的创建及注册 ------>2.5、probe 三、I2S 四、DMA ------>4.1、MMU IOMMU 一、引言 本篇文章对于常见通讯接口的内…

Baumer工业相机堡盟工业相机如何联合OpenHarmony框架开发连接USB相机(OpenHarmony)

Baumer工业相机堡盟工业相机如何联合OpenHarmony框架开发连接USB相机&#xff08;OpenHarmony&#xff09; Baumer工业相机介绍OpenHarmony介绍使用OpenHarmony开发连接Baumer工业USB相机1.配置权限2.初始化相机功能3.使用USB相机采集图像4.使用USB相机保存图像5.释放相机资源 …

Copilot Workspace是GitHub对人工智能驱动的软件工程的诠释

软件开发的未来是人工智能驱动的集成开发环境吗&#xff1f;至少GitHub 是这样想的。 在今年初秋于旧金山举行的 GitHub Universe 年度大会之前&#xff0c;GitHub 发布了 Copilot Workspace&#xff0c;这是一种开发环境&#xff0c;利用 GitHub 所称的 “Copilot 驱动的代理…