C++ Optins接口封装设置自动重连

当数据库突然断开的时候,API将接收不到MySQL的连接,在代码里面写关于自动重连可以实现数据库断开之后重连。

1、首先在LXMysql.h创建Option函数

	//mysql参数的设定 设置自动重连  在connect之前调用/*int STDCALL mysql_options(MYSQL *mysql, enum mysql_option option,const void *arg);*/bool Option(LX_option opt, const void* arg);

在传入参数的时候,我们知道,关于在代码部分输入 mysql_options(),按住键盘ctrl,鼠标点击进入定义,我们可以看到关于mysql_options()的构造。

第一个就是mysql数据库,第二个是对应的mysql_option的枚举,第三个是一个对应的配置值。

int STDCALL mysql_options(MYSQL *mysql, enum mysql_option option,const void *arg);

1.1、防止枚举被多次引用产生报错,我们可以自己定义一个枚举;

enum mysql_option的构造如下

enum mysql_option {MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_COMPRESS,MYSQL_OPT_NAMED_PIPE,MYSQL_INIT_COMMAND,MYSQL_READ_DEFAULT_FILE,MYSQL_READ_DEFAULT_GROUP,MYSQL_SET_CHARSET_DIR,MYSQL_SET_CHARSET_NAME,MYSQL_OPT_LOCAL_INFILE,MYSQL_OPT_PROTOCOL,MYSQL_SHARED_MEMORY_BASE_NAME,MYSQL_OPT_READ_TIMEOUT,MYSQL_OPT_WRITE_TIMEOUT,MYSQL_OPT_USE_RESULT,MYSQL_REPORT_DATA_TRUNCATION,MYSQL_OPT_RECONNECT,MYSQL_PLUGIN_DIR,MYSQL_DEFAULT_AUTH,MYSQL_OPT_BIND,MYSQL_OPT_SSL_KEY,MYSQL_OPT_SSL_CERT,MYSQL_OPT_SSL_CA,MYSQL_OPT_SSL_CAPATH,MYSQL_OPT_SSL_CIPHER,MYSQL_OPT_SSL_CRL,MYSQL_OPT_SSL_CRLPATH,MYSQL_OPT_CONNECT_ATTR_RESET,MYSQL_OPT_CONNECT_ATTR_ADD,MYSQL_OPT_CONNECT_ATTR_DELETE,MYSQL_SERVER_PUBLIC_KEY,MYSQL_ENABLE_CLEARTEXT_PLUGIN,MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,MYSQL_OPT_MAX_ALLOWED_PACKET,MYSQL_OPT_NET_BUFFER_LENGTH,MYSQL_OPT_TLS_VERSION,MYSQL_OPT_SSL_MODE,MYSQL_OPT_GET_SERVER_PUBLIC_KEY,MYSQL_OPT_RETRY_COUNT,MYSQL_OPT_OPTIONAL_RESULTSET_METADATA,MYSQL_OPT_SSL_FIPS_MODE,MYSQL_OPT_TLS_CIPHERSUITES,MYSQL_OPT_COMPRESSION_ALGORITHMS,MYSQL_OPT_ZSTD_COMPRESSION_LEVEL,MYSQL_OPT_LOAD_DATA_LOCAL_DIR,MYSQL_OPT_USER_PASSWORD,MYSQL_OPT_SSL_SESSION_DATA
};

1.2、重新创建一个类LXData,主要存放数据。将上述枚举的内容复制进去,为了防止命名冲突,将MYSQL_全部替换为LX_

enum LX_option {LX_OPT_CONNECT_TIMEOUT,LX_OPT_COMPRESS,LX_OPT_NAMED_PIPE,LX_INIT_COMMAND,LX_READ_DEFAULT_FILE,LX_READ_DEFAULT_GROUP,LX_SET_CHARSET_DIR,LX_SET_CHARSET_NAME,LX_OPT_LOCAL_INFILE,LX_OPT_PROTOCOL,LX_SHARED_MEMORY_BASE_NAME,LX_OPT_READ_TIMEOUT,LX_OPT_WRITE_TIMEOUT,LX_OPT_USE_RESULT,LX_REPORT_DATA_TRUNCATION,LX_OPT_RECONNECT,LX_PLUGIN_DIR,LX_DEFAULT_AUTH,LX_OPT_BIND,LX_OPT_SSL_KEY,LX_OPT_SSL_CERT,LX_OPT_SSL_CA,LX_OPT_SSL_CAPATH,LX_OPT_SSL_CIPHER,LX_OPT_SSL_CRL,LX_OPT_SSL_CRLPATH,LX_OPT_CONNECT_ATTR_RESET,LX_OPT_CONNECT_ATTR_ADD,LX_OPT_CONNECT_ATTR_DELETE,LX_SERVER_PUBLIC_KEY,LX_ENABLE_CLEARTEXT_PLUGIN,LX_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,LX_OPT_MAX_ALLOWED_PACKET,LX_OPT_NET_BUFFER_LENGTH,LX_OPT_TLS_VERSION,LX_OPT_SSL_MODE,LX_OPT_GET_SERVER_PUBLIC_KEY,LX_OPT_RETRY_COUNT,LX_OPT_OPTIONAL_RESULTSET_METADATA,LX_OPT_SSL_FIPS_MODE,LX_OPT_TLS_CIPHERSUITES,LX_OPT_COMPRESSION_ALGORITHMS,LX_OPT_ZSTD_COMPRESSION_LEVEL,LX_OPT_LOAD_DATA_LOCAL_DIR,LX_OPT_USER_PASSWORD,LX_OPT_SSL_SESSION_DATA};

2、在LXMysql.h中引入#include"LXData.h"

#include"LXData.h"

3、在test_LXMysql.cpp里面编写代码

bool LXMysql::Option(LX_option opt, const void* arg){if (!mysql)//如果mysql没有初始化好{cerr << "Option failed: mysql is NULL" << endl;return false;}//(mysql_option)opt 强转optint re = mysql_options(mysql, (mysql_option)opt, arg);if (re != 0){cerr << "mysql_options failed!" << mysql_error(mysql) << endl;return false;}return true;}

4、编写超时和重连函数,分别在LXMysql.h和LXMysql.cpp定义和编写

    //连接超时时间bool SetConnectTimeout(int sec);//自动重连,默认不自动bool SetReConnect(bool isre = true);
    bool LXMysql::SetConnectTimeout(int sec){return Option(LX_OPT_CONNECT_TIMEOUT, &sec);}bool LXMysql::SetReConnect(bool isre){return Option(LX_OPT_RECONNECT, &isre);}

5、测试,在test_LXMysql.cpp里面测试,测试重连必须在Connect函数之前

     //连接超时秒my.SetConnectTimeout(3);//自动重连my.SetReConnect(true);

6、测试是否成功

// 测试自动重连是否生效for (;;){//flush 刷新一下cout << my.Query(sql.c_str()) << flush;}

7、测试2

7.1、打开数据库,你会发现终端一直输出111111.....

7.1、关闭数据库之后,终端输出0,并且报错连接不到

7.3、重新打开数据库,会发现终端又重新开始输出11111...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597459.shtml

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

相关文章

面试题:你如何理解 System.out.println()?

文章目录 前言首先分析System源码&#xff1a;out源码分析println分析 前言 如果你能自己读懂System.out.println()&#xff0c;就真正了解了Java面向对象编程的含义。 面向对象编程即创建了对象&#xff0c;所有的事情让对象帮亲力亲为&#xff08;即对象调用方法&#xff09…

123基于matlab的差分优化算法优化极限学习机,DE-ELM

基于matlab的差分优化算法优化极限学习机&#xff0c;DE-ELM。输出分类识别结果和准确率。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 123差分优化算法极限学习机 (xiaohongshu.com)

关于TCP vegas算法杂谈

看到大佬写的优秀的 tcp vegas 拥塞控制大揭秘-CSDN博客&#xff0c;有感而发&#xff0c;自己研究CC有一段时间了。但是还一直有vegas多牛的说法。从理论上来说&#xff0c;vegas确实是比较好的CC算法&#xff0c;特别是他的公平友好性&#xff0c;我个人也觉得是最好的。 包…

深入了解 Vite:快速、简洁、高效的前端构建工具(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

包含自动轮播、点击切换、显示图片信息和页码方框显示码数的 HTML 和 JavaScript 示例:

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>轮播图</title><style>#carousel-conta…

FPGA高端项目:纯verilog的 10G-UDP 高速协议栈,提供7套工程源码和技术支持

目录 1、前言免责声明更新说明 2、相关方案推荐我这里已有的以太网方案本协议栈的千兆网UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、详细设计方案设计架构框图网络调试助手GT资源使用GT…

java练习题之String方法运用

应用知识点&#xff1a;​​​​​​String类 1&#xff1a;(String 类)仔细阅读以下代码段&#xff1a; String s "hello"; String t"hello"; char[] c {h,e,l,l,o}; 2&#xff1a;下列选项输出结果为false 的语句是() System.out.println( s.euqals( t…

Leetcode2962. 统计最大元素出现至少 K 次的子数组

Every day a Leetcode 题目来源&#xff1a;2962. 统计最大元素出现至少 K 次的子数组 解法1&#xff1a;滑动窗口 算法如下&#xff1a; 设 mx max⁡(nums)。右端点 right 从左到右遍历 nums。遍历到元素 xnums[right] 时&#xff0c;如果 xmx&#xff0c;就把计数器 co…

Docker安装【学习Docker(十)】Docker SQLServer的安装与卸载、基本命令

文章目录 1. 安装SQL Server拉取镜像运行容器 2. 卸载SQL Server3. 开放端口4. 常用命令5. 使用Navicat Premium连接 1. 安装SQL Server 拉取镜像 sudo docker pull mcr.microsoft.com/mssql/server:2017-latest运行容器 创建挂载点目录 mkdir /home/sqlserver_data运行容器…

漏洞复现--天融信TOPSEC两处远程命令执行

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

【Nodejs】基于node http模块的博客demo代码实现

目录 package.json www.js db.js app.js routes/blog.js controllers/blog.js mysql.js responseModel.js 无开发&#xff0c;不安全。 这个demo项目实现了用Promise异步处理http的GET和POST请求&#xff0c;通过mysql的api实现了博客增删改查功能&#xff0c;但因没有…

Unity3D DOTS如何基于ECS的骨骼动画播放与切换 详解

前言 Unity3D DOTS&#xff08;Data-Oriented Technology Stack&#xff09;是Unity引擎的一套新的技术堆栈&#xff0c;旨在优化游戏的性能和可伸缩性。其中&#xff0c;ECS&#xff08;Entity Component System&#xff09;是一种新的编程模型&#xff0c;用于处理游戏中的实…

【KingbaseES】实现MySql函数WEERDAY

CREATE OR REPLACE FUNCTION weekday(date_val date) RETURNS integer AS $$ BEGIN RETURN EXTRACT(ISODOW FROM date_val); END; $$ LANGUAGE plpgsql IMMUTABLE;

智邦国际ERP系统 SQL注入漏洞复现

0x01 产品简介 北京智邦国际软件技术有限公司的ERP系统是一种集成化的企业资源计划&#xff08;Enterprise Resource Planning&#xff0c;简称ERP&#xff09;解决方案&#xff0c;旨在帮助企业实现高效的运营管理和资源优化。 0x02 漏洞概述 智邦国际ERP系统 GetPersonalS…

鸿蒙原生应用/元服务开发-发布进度条类型通知

进度条通知也是常见的通知类型&#xff0c;主要应用于文件下载、事务处理进度显示。HarmonyOS提供了进度条模板&#xff0c;发布通知应用设置好进度条模板的属性值&#xff0c;如模板名、模板数据&#xff0c;通过通知子系统发送到通知栏显示。 目前系统模板仅支持进度条模板&a…

USB 转 TTL线直接读取DS18B20

简介 使用USB转TTL线直接读取DS18B20 温度。 电路图 绘制图 实物图 软件 Download 1-Wire/iButton Drivers for Windows 操作 所有的线路连接好之后将 USB 转 TTL线接到PC上; 安装软件 Download 1-Wire/iButton Drivers for Windows 并打开 软件打开之后先选择串口后 …

自动驾驶状态观测1-坡度估计

背景 自动驾驶坡度对纵向的跟踪精度和体感都有一定程度的影响。行车场景虽然一般搭载了GPS和IMU设备&#xff0c;但pitch角一般不准&#xff0c;加速度也存在波动大的特点。泊车场景一般在室内地库&#xff0c;受GPS信号遮挡影响&#xff0c;一般无法获取高程和坡度。搭载昂贵…

“安全相伴 快乐同行”儿童安全教育主题活动

2023年12月30日在海南成美公益基金会的支持下&#xff0c;沈阳市爱梦成真公益发展中心联合庄河市大树互助志愿服务中心举办“2023-2024年度阳光亲人项目”——“安全相伴快乐同行”儿童安全教育主题活动&#xff0c;参与本次活动的领导及嘉宾有&#xff1a;庄河市青年志愿者协会…

计算机网络(2)

计算机网络&#xff08;2&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 计算机网络和因特网&#xff08;2&#xff09;分组交换网中的时延、丢包和吞吐量时延丢包吞吐量总结 协议层次及其服务模型模型类型OSI模型分析TCP/IP模型分析 追溯历史 小程一言 我…

UE5 C++(十一)— 碰撞检测

文章目录 代理绑定BeginOverlap和EndOverlapHit事件的代理绑定碰撞设置 代理绑定BeginOverlap和EndOverlap 首先&#xff0c;创建自定义ActorC类 MyCustomActor 添加碰撞组件 #include "Components/BoxComponent.h"public:UPROPERTY(VisibleAnywhere, BlueprintRea…