高性能服务器系列-第二章 Mysql C++ 封装
前言
MySQL 是一个开放源码的小型关联式数据库管理系统,由于其体积小、速度快、总体拥有成本低,高性能、可靠性和可扩展性等特点,被广泛地应用。为简化MySQL的使用,采用C++对mysql常用功能进行封装。
一、封装接口定义
二、接口调用示例
- 修改数据库用户名、密码、数据库名
- 获取数据库实例
MysqlBase * g_MysqlBaseInstance;
g_MysqlBaseInstance = MysqlBase::GetInstance(0);//获取第一个数据库实例,可根据需要定义多个实例
- 创建数据库表
#define Create_VedioDataTable "create table if not exists VedioDataTable(Id char(18) primary key not null,VedioSize INT,VedioData MediumBlob);"
pMysqlBaseInstance->mysql_noResult_query(Create_VedioDataTable);
- 多行多列数据查询
map<int, vector<string>> results;
pMysqlBaseInstance->mysql_select_query(Select_BookInfo, results);
- 单行数据查询
#define Select_OneBookInfo "SELECT * from BookInfo where isbn = '%s' limit 1;"
vector<string> results;
char slqbuf[1024]; //存放查询 sql 语句字符串
sprintf(slqbuf, Select_OneBookInfo, isbn.c_str());
pMysqlBaseInstance->mysql_select_SingleLine_query(slqbuf, results);
- 单列查询
#define Select_ISNBFromBookInfo "SELECT isbn from BookInfo;"
vector<string> results;
pMysqlBaseInstance->mysql_select_SingleRow_query(Select_ISNBFromBookInfo, results);
- 大数据(视频、图片、二进制等)输入数据库,以MP4视频文件为例
InsertBLOB(g_MysqlBaseInstance, "ID_001", "/xxfw/MysqlEncap/BigBuckBunny.mp4");
- 大数据查询
QureyBLOB(g_MysqlBaseInstance, "ID_001"); //查询数据存储为本地MP4,使用时根据具体需求适配
三、用户集成
- 解压MysqlEncap.zip后可得到如下目录:
- 拷贝Mysql文件夹至用户工程,添加源文件编译目录:
- ,获取数据库实例,调用示例:
g_MysqlBaseInstance = MysqlBase::GetInstance(0);
cout << "\n--------------------------无返回值查询---------------------------------------------" << endl;
CreateBookInfoTable(g_MysqlBaseInstance);
CreateVedioDataTable(g_MysqlBaseInstance);
AddBook(g_MysqlBaseInstance, "9787115434159","Clean Code","Professional competence of programmers");
AddBook(g_MysqlBaseInstance, "9787521723038", "Huawei Interview Record", "A dictionary of Huaweis historical stories");
AddBook(g_MysqlBaseInstance, "9787508353937", "Design Pattern", "A study guide that values the brain");
cout << "\n--------------------------多行多列查询---------------------------------------------" << endl;
GetBookInfo(g_MysqlBaseInstance);
cout << "\n---------------------------单行查询------------------------------------------------" << endl;
GetOneBookInfo(g_MysqlBaseInstance, "9787115434159");
cout << "\n---------------------------单列查询-----------------------------------------------" << endl;
GetBookIsbn(g_MysqlBaseInstance);
cout << "\n---------------------------大数据入库,插入mp4视频数据----------------------------" << endl;
InsertBLOB(g_MysqlBaseInstance, "ID_001", "/xxfw/MysqlEncap/BigBuckBunny.mp4");
cout << "\n---------------------------大数据查询,查询视频数据写入MP4文件--------------------" << endl;
QureyBLOB(g_MysqlBaseInstance, "ID_001");
四、示例工程编译及运行
- 编译环境
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 8.5.2111
gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4)
g++ (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4)
cmake version 3.20.2 - 编译
将文件上传至linxu系统,以”/xxfw/MysqlEncap/”目录为例
cd /xxfw/MysqlEncap/
ls
make
编译完成后在工程目录下生成MysqlEncap.out:
- 运行
执行./MysqlEncap.out启动服务:
五、资源下载
- 获取示例工程资源
链接:https://pan.baidu.com/s/1vfNlcQh_iKlDKjnz8aYkeg?pwd=mzc5
提取码:mzc5 - 获取解压密码
链接:http://jiajiatong.store/target.html?id=3 - 上一章:
链接:高性能服务器系列-第一章 进程内置redis,性能提升11倍,QPS可达210万次/秒 - 下一章:
链接:高性能服务器系列-第三章 Protobuf封装(C++/C#/Go)