mysqlcppconn之ConnectOptionsMap的使用
由来
继上一篇文章, 发现之前写的一篇文章中断线重连部分是错误的, 也是现在翻阅了源码才知道
想要自动重连, 必须使用ConnectOptionsMap才可以
但由于官方代码没有做好导出部分的处理, 直接使用此类型会造成内存异常(跨模块传递STL对象)
所以本人简单的添加了几个导出函数, 绕过了这个问题
添加代码
在connection.h中, 找到
typedef std::map< sql::SQLString, ConnectPropertyVal > ConnectOptionsMap;
在下面紧接着添加
CPPCONN_PUBLIC_FUNC ConnectOptionsMap* ConnectOptionsMap_New();
CPPCONN_PUBLIC_FUNC void ConnectOptionsMap_Delete(ConnectOptionsMap *obj);
CPPCONN_PUBLIC_FUNC void ConnectOptionsMap_Set(ConnectOptionsMap *obj, const char* k, const Variant &v);
在mysql_connection.cpp中, 文件最后, sql的命名空间内, 即最后一个花括号内, 添加以下代码
CPPCONN_PUBLIC_FUNC ConnectOptionsMap* ConnectOptionsMap_New()
{return new ConnectOptionsMap;
}CPPCONN_PUBLIC_FUNC void ConnectOptionsMap_Delete(ConnectOptionsMap *obj){delete obj;
}CPPCONN_PUBLIC_FUNC void ConnectOptionsMap_Set(ConnectOptionsMap *obj, const char* k, const Variant &v){(*obj)[k] = v;
}
编译, 取出dll和lib文件, 搞定.
如何使用
sql::Connection* CSqlWorker::NewSqlObject()
{try{typedef decltype (sql::ConnectOptionsMap_Delete)* TConnectOptionsMap_Deleter;std::unique_ptr<sql::ConnectOptionsMap, TConnectOptionsMap_Deleter> Maps(sql::ConnectOptionsMap_New(), sql::ConnectOptionsMap_Delete);sql::ConnectOptionsMap_Set(Maps.get(), "hostName", sql::Variant(sql::SQLString(m_host.c_str())));sql::ConnectOptionsMap_Set(Maps.get(), "userName", sql::Variant(sql::SQLString(m_user.c_str())));sql::ConnectOptionsMap_Set(Maps.get(), "password", sql::Variant(sql::SQLString(m_pass.c_str())));sql::ConnectOptionsMap_Set(Maps.get(), "OPT_RECONNECT", sql::Variant(true));sql::ConnectOptionsMap_Set(Maps.get(), "OPT_CHARSET_NAME", sql::Variant(sql::SQLString("utf8")));return m_driver->connect(*Maps.get());}catch (sql::SQLException e){_ASSERT(0);}return NULL;
}
更多参数及作用, 请参阅mysql_connection.cpp的MySQL_Connection::init函数
完结
是不是看起来比较麻烦?
但为了使用扩展功能(动态链接情况下), 只好先这样了
若要避免这个问题, 只能使用静态连接, 且运行库一致, 才可以.
转载于:https://www.cnblogs.com/jins-note/p/9513566.html
mysqlcppconn之ConnectOptionsMap的使用相关推荐
- cpp mysql_使用MYSQLCPPCONN连接MYSQL数据库与读写BLOB字段
起初也是用C语言接口, 但不知为什么在VS2010下使用时调用mysql_thread_init()函数总是失败(动态链接) 其他函数也用不了, 用了一阵子的ODBC但不会操作BLOB字段 遂转到MY ...
- 无法打开包括文件:“mysql..h”: No such file or directory
出现这个问题后,根据网上提供的方法做了很多,但都没有用.后来在盘里面找了一下确实没有mysql.h这个文件,原来mysql必须选择complete安装方式才会有这个头文件.首先重新安装了一次mysql ...
- c++ 操作mysql_C++操作mysql方法总结(1)
C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为boo ...
- VC++2010配置使用MySQL5.6
0.前提 安装后的文件概览 编译器: VC++2010 MySQL版本:MySQL5.6.19 for win64 Connector版本:connector c++ 1.1.3 在VS2010 ...
- linux mysql connector_fd_在CentOS里使用MySQL Connector/C++
操作系统版本:CentOS6 64位 1,安装boost库.因为MySQL Connector/C++使用了boost库,所以必须先安装boost库,我们才能使用MySQL Connector/C++ ...
- C++中序列化对象并存储到mysql
1.序列化 C++序列化存在多种方式,我这里使用的boost,推荐看一个简单的教程. boost方法就是在类定义中添加一个友元类对象,并实现serialize()方法就可以让该类变为可序列化类.要使用 ...
- C++连接MySQL(Windows)
一般来说,VS下采用微软自身的SQL Server是比较常见的做法,但SQL Server只适合学习,不适合真正应用.在此,我们选择MySQL作为后台数据库.C++语言本身并没有提供访问数据库的东西, ...
- MySQL Connector/C++入门教程(上)
转载原文:http://blog.csdn.net/jgood/article/details/5661339 原文地址: http://dev.mysql.com/tech-resources/ar ...
- c++ datetime mysql_转:C++操作mysql方法总结(1)
项目中使用的数据库名为booktik 表为book ---. (共有30条记录,只列出了部分记录,14-30未列出) 一.通过mysql的C api进行操作 1.新建一个空项目 2.将D:\Progr ...
最新文章
- rpc进程Linux,linux RPC 测试(转载)
- linux .net core java_仅在.NET Core 2.0运行时的Linux上缺少运行时存储库错误
- linux 修改默认路径吗,linux中vsftp修改默认路径
- HTTP和HTTPS的了解
- ES curator离线安装与部署
- 巴铁 无人驾驶_巴铁?Clip-air?请查收汽车的最新玩法
- C# DDOS攻击代码
- fullCalendar:中文API
- 什么情况下document.write会覆盖页面及覆盖原理解释
- WINDOWS 服务端 SVN自动部署/一键批处理 SVN 更新项目
- python爬虫实例(一) b站篇
- Mac下adb不能重启
- 繁体字生僻字数据库报错处理
- K8S CRD 资源对象删除不掉
- Python——程序设计:商贷月供计算器
- 关于GX WORKS2中M8002、M8012、M8013无法使用的问题
- 提取小米手机的备份数据
- android 获取屏幕旋转方向,android获取手机屏幕尺寸和旋转方向
- leetcode406:const、、static
- java物流系统_java 物流管理系统
热门文章
- deepin关机卡在图标界面 mysql Community...10min
- Luogu P2920 时间管理【二分答案】
- Android为TV端助力context转换类型
- 阿里大鱼.net core 发送短信
- 事务中SET XACT_ABORT各种用法
- 大理,风花雪月俏丽金花
- shell脚本[] [[]] -n -z 的含义解析
- BZOJ2843: 极地旅行社
- python3.6升级及setuptools、pip安装
- Win10開始菜单打不开