centos c++ mysql_腾讯云Linux CentOS C++连接MySQL
一、代码实现
1、若在C++代码中写#include显示该库没安装,就先安装这个库 sudo yum install mysql-community-devel.x86_64
2、新建myDB.h文件
#include
#include
#include
using namespace std;
class MyDB
{
public:
MyDB();
~MyDB();
bool initDB(string host, string user, string pwd, string db_name);
bool exeSQL(string sql);
private:
MYSQL *connection;
MYSQL_RES *result;
MYSQL_ROW row;
};
3、新建myDB.cpp
#include
#include
#include
#include "myDB.h"
using namespace std;
MyDB::MyDB()
{
connection = mysql_init(NULL); // 初始化数据库连接变量
if(connection == NULL)
{
cout << "Error:" << mysql_error(connection);
exit(1);
}
}
MyDB::~MyDB()
{
if(connection != NULL) // 关闭数据库连接
{
mysql_close(connection);
}
}
bool MyDB::initDB(string host, string user, string pwd, string db_name)
{
// 函数mysql_real_connect建立一个数据库连接
// 成功返回MYSQL*连接句柄,失败返回NULL
connection = mysql_real_connect(connection, host.c_str(), user.c_str(), pwd.c_str(), db_name.c_str(), 0, NULL, 0);
if(connection == NULL)
{
cout << "Error:" << mysql_error(connection);
exit(1);
}
return true;
}
bool MyDB::exeSQL(string sql) {
cout<
if(mysql_query(connection, sql.c_str())) { // mysql_query()执行成功返回0,失败返回非0值
cout << "Query Error:" << mysql_error(connection);
return false;
}
else {
result = mysql_use_result(connection); // 获取结果集
while(row = mysql_fetch_row(result)) { // 不断获取下一行
vector rowResult;
// mysql_num_fields()返回结果集中的列数
for(int j = 0; j < mysql_num_fields(result); ++j) {
cout << row[j] << " ";
}
cout << endl;
}
// 释放结果集的内存
mysql_free_result(result);
}
cout<
return true;
}
4、在main文件中测试
void testDB(){
MyDB db;
db.initDB("localhost", "root", "0709", "EpidemicDatabase");
db.exeSQL("INSERT INTO User VALUES(\"452223199707090000\", \"catnip\", \"0709\", false)");
}
5、在mysql中查看对应的数据库和表格
插入sql执行成功
二、数据结构
1、MYSQL_RES
typedef struct st_mysql_res
{
my_ulonglong row_count; // 结果集的行数
unsigned int field_count, current_field; // 结果集的列数,当前列
MYSQL_FIELD *fields; // 结果集的列信息
MYSQL_DATA *data; // 结果集的数据
MYSQL_ROWS *data_cursor; // 结果集的光标
MEM_ROOT field_alloc; // 内存结构
MYSQL_ROW row; // 非缓冲的时候用到
MYSQL_ROW current_row; // 当前行。mysql_store_result时会用到
unsigned long *lengths; // 每列的长度
MYSQL *handle; // mysql_use_result会用。
my_bool eof; // 是否为行尾
} MYSQL_RES;
2、MYSQL_ROWS
typedef struct st_mysql_rows
{
struct st_mysql_rows *next; //列表的行
MYSQL_ROW data;
} MYSQL_ROWS; //mysql的数据的链表节点。可见mysql的结果集是链表结构
3、MYSQL_DATA
typedef struct st_mysql_data
{
my_ulonglong rows;
unsigned int fields;
MYSQL_ROWS *data;
MEM_ROOT alloc;
} MYSQL_DATA; // 数据集的结构
4、MYSQL_FIELD
typedef struct st_mysql_field
{
char *name; // 列名称
char *table; //如果列是字段,列表
char *def; //默认值(由mysql_list_fields设置)
enum enum_field_types type; //类型的字段。Se mysql_com。h的类型
unsigned int length; //列的宽度
unsigned int max_length; //选择集的最大宽度
unsigned int flags; //Div标记集
unsigned int decimals; //字段中的小数位数
} MYSQL_FIELD; //列信息的结构
5、USED_MEM
typedef struct st_used_mem //结构为once_alloc
{
struct st_used_mem *next; //下一个块使用
unsigned int left; //记忆留在块
unsigned int size; //块的大小
} USED_MEM; //内存结构
6、MEM_ROOT
typedef struct st_mem_root
{
USED_MEM *free;
USED_MEM *used;
USED_MEM *pre_alloc;
unsigned int min_malloc;
unsigned int block_size;
void (*error_handler)(void);
} MEM_ROOT; //内存结构
三、获取数据的API
1、MYSQL_RES *mysql_store_result(MYSQL *mysql)
(1)通过检查mysql_store_result()是否返回0,可检测查询是否没有结果集。
(2)一旦调用了mysql_store_result()并获得了不是Null指针的结果,可调用mysql_num_rows()来找出结果集中的行数。
(3)可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。
(4)一旦完成了对结果集的操作,必须调用mysql_free_result()。
2、MYSQL_RES *mysql_use_result(MYSQL *mysql)
初始化结果集检索
(1)使用mysql_use_result()时,必须执行mysql_fetch_row(),直至返回NULL值,否则,未获取的行将作为下一个检索的一部分返回。
(2)不能对结果集用mysql_data_seek()、mysql_row_seek()、mysql_row_tell()、mysql_num_rows()或mysql_affected_rows(),也不应发出其他查询,直至mysql_use_result()完成为止。(但是,提取了所有行后,mysql_num_rows()将准确返回提取的行数)。
(3)一旦完成了对结果集的操作,必须调用mysql_free_result()
3、MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
检索结果集的下一行。在mysql_store_result()之后使用时,如果没有要检索的行,mysql_fetch_row()返回NULL。
//假设mysql已经连接好
MYSQL_RES* result = mysql_store_result(mysql);
if (result == NULL) {
return;
}
MYSQL_ROW row;
int num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result))) {
long *lengths = mysql_fetch_lengths(result);
for(int i = 0; i < num_fields; i++) {
printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
}
printf("/n");
}
4、MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
获取列的信息
(1)重复调用该函数,以检索关于结果集中所有列的信息。无剩余字段时,mysql_fetch_field()返回NULL。
5、MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)
取得列的信息
(1)对于结果集,返回所有MYSQL_FIELD结构的数组。每个结构提供了结果集中1列的字段定义。
int num_fields = mysql_num_fields(result);
MYSQL_FIELD *fields = mysql_fetch_fields(result);
for(int i = 0; i < num_fields; i++) {
printf("Field %u is %s/n", i, fields[i].name);
}
6、void mysql_free_result(MYSQL_RES *result)
释放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result()释放结果集使用的内存。
释放完成后,不要尝试访问结果集。
centos c++ mysql_腾讯云Linux CentOS C++连接MySQL相关推荐
- 云服务器 cvm mysql_腾讯云CVM如何安装搭建MySQL
本文档使用 Windows Server 2012 R2 示例,介绍搭建 MySQL 5.5 的具体步骤. 通常情况下 Windows 系统经常使用 SQL Server 数据库,但由于 SQL Se ...
- 腾讯云Linux服务器搭建(三) Mysql 8.0.11的安装和设置
新拿到的主机,里面什么都没有.从数据库开始安装.先用 yum list mysql* 查看了一下,没有任何Mysql相关的内容.然后开是安装,yum install mysql-server mysq ...
- 腾讯云linux数据盘格式化,腾讯云服务器Centos挂载数据盘的方法
腾讯云服务器Centos挂载数据盘的方法 发布时间:2020-08-24 08:24:30 来源:脚本之家 阅读:138 作者:逐风 栏目:服务器 第一.检查硬盘设备是否有数据盘 # 先执行 fdis ...
- 远程访问 Linux 服务器中的 redis 数据库(腾讯云服务器 CentOS 8.0)
远程访问 Linux 服务器中的 redis 数据库(腾讯云服务器 CentOS 8.0) 1. 开放腾讯云服务器防火墙端口 2. 修改 redis.conf 文件配置 3. 设置服务器防火墙状态 4 ...
- 【Centos 8】【Centos 7】腾讯云服务器 安装 docker
前言 CentOS Linux release 8.2 CentOS Linux release 7.9 yum源 腾讯云服务器Centos 8.Centos 7版本上的yum中包含了docker,无 ...
- 阿里云linux centos 一键部署web环境--图文详解
阿里云linux centos 一键部署web环境--图文详解 标签: linux阿里云一键部署 2017-04-15 12:28 386人阅读 评论(0) 收藏 举报 分类: linux(11) ...
- 腾讯云Linux服务器如何安装Discuz个人论坛?
操作场景 Discuz! 是全球成熟度最高.覆盖率最大的论坛网站软件系统之一,被200多万网站用户使用.您可通过 Discuz! 搭建论坛,本文档介绍在腾讯云云服务器上搭建 Discuz! 论坛及其所 ...
- 拉取ftp服务器上的文件_winscp和云服务器,2步实现winscp将文件上传到腾讯云Linux云服务器...
WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议,它的主要功能就是在本地与远程计算机间安全的复制文件.与使用FTP上传代码相比,通过WinSCP可以直接使 ...
- 腾讯云linux服务器怎么使用图形化界面_winscp使用方法,winscp使用方法详细说明...
WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议,它的主要功能就是在本地与远程计算机间安全的复制文件.与使用FTP上传代码相比,通过WinSCP可以直接使 ...
最新文章
- 【事务】特性、安全保障及实现
- boost::mp11::mp_replace_if_q相关用法的测试程序
- Spring State Machine:它是什么,您需要它吗?
- 内存中数据模型和大数据持久性
- 诗与远方:无题(二十六)- 曾经给一个妹子写的一首诗
- python中字典的find_python中的字典
- SQL Server 数据库角色简介
- 如何修改WP文章字体格式、字号大小、字体颜色
- oracle 存储过程给另一个用户的权限问题
- 基于JSP+SERVLET的新闻发布系统(一)
- Win10如何安装自带的XPS Viewer查看器
- java 电子签章 开源_java操作pdf制作电子签章 - CSDN博客
- 1186: 零起点学算法93——改革春风吹满地(C)
- 使用Typora列表嵌套列表,回车无法返回上一级列表的状态
- 国家电网一二次融合配电终端(FTU)发展新方向馈线自动化:具备集中型馈线自动化/就地型馈线自动化包括电压时间型、电压电流型、自适应综合型)及零序电流,零序电压或外施信号法的单相接地故障选线功能
- ECCV22 最新54篇论文分方向整理|包含Transformer、图像处理、人脸等(附下载)...
- 查看Ubuntu的版本号,并添加国内镜像源
- 推荐系统实战——自动化构建用户以及物料画像
- AddressBook 地址簿 (电话簿) 访问与修改-IOS开发
- 新型知识管理工具-Baklib,比起语雀我更喜欢它
热门文章
- python大规模获取豆瓣影评_python爬取豆瓣电影排行榜(requests)
- 基于花季A传媒ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则
- 安卓Apk安装过程,社招面试心得
- Win10输入法无法选择,右下角出现叉号,提示IME被禁用
- 亿级流量实验平台设计与实践
- 5.6.3 分组总计查询
- PS 2019 Mac版 自学入门系列(十二)—— 应用滤镜
- 4、编写程序,根据用户输入的数字转换成相应的中文的大写数字。例如,1.23转换为“壹点贰叁”。
- 两分钟研究透idea中Git文件的颜色,绿红蓝白灰
- intel opcode