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函数
完结
是不是看起来比较麻烦?
但为了使用扩展功能(动态链接情况下), 只好先这样了
若要避免这个问题, 只能使用静态连接, 且运行库一致, 才可以.
mysqlcppconn之ConnectOptionsMap的使用的更多相关文章
- vc++2013中使用MySQL connector/C++ 1.1.4静态链接报错
		
包含头文件 #include <mysql_connection.h> #include <mysql_driver.h> #include <cppconn/state ...
 - 在CentOS里使用MySQL Connector/C++
		
操作系统版本:CentOS6 64位 1,安装boost库.因为MySQL Connector/C++使用了boost库,所以必须先安装boost库,我们才能使用MySQL Connector/C++ ...
 - VC++2010配置使用MySQL5.6
		
0.前提 安装后的文件概览 编译器: VC++2010 MySQL版本:MySQL5.6.19 for win64 Connector版本:connector c++ 1.1.3 在VS2010 ...
 - vs2015编译mysql c++ connector
		
目前MySQL Connector/C++的binary版本最高只支持VS2008,VS2015需要下载源码自行编译. 1.CMAKE 到官网下载最新的稳定版本 把bin目录添加到环境变量PATH中 ...
 - 【C++】VS2015/VS2017连接Mysql数据库教程
		
要给C++程序连接MySQL数据库,分别需要: 安装MySQL Server 下载MySQL Connector/C++ 在IDE中配置依赖 然后就可以在代码中调用API,来连接以及操作数据库. 一. ...
 - C++连接MySQL(Windows)
		
一般来说,VS下采用微软自身的SQL Server是比较常见的做法,但SQL Server只适合学习,不适合真正应用.在此,我们选择MySQL作为后台数据库.C++语言本身并没有提供访问数据库的东西, ...
 - 转:C++操作mysql方法总结(1)
		
原文:http://www.cnblogs.com/joeblackzqq/p/4332945.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作m ...
 - C语言连接MySQL数据库(转)
		
c++连接MySQL有两种方式,1是原始的方法,2是用 Connector c++ .Connector c++ 只是一种封装,使之更加方便. 1.原始方法 这里归纳了C API可使用的函数,并在下 ...
 - C++操作mysql方法总结(1)
		
C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为boo ...
 
随机推荐
- 启动与销毁Activity
			
启动与销毁Activity 编写:kesenhoo - 原文:http://developer.android.com/training/basics/activity-lifecycle/start ...
 - Sum(欧拉降幂+快速幂)
			
Input 2 Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cas ...
 - 知了课堂 Python Flask零基础 笔记整理
			
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
 - [转] kerberos介绍
			
[From] https://www.cnblogs.com/ulysses-you/p/8107862.html 重要术语 1. KDC 全称:key distributed center 作用:整 ...
 - js面向对象(二)——继承
			
上一篇随笔讲了封装,这一篇我们说说继承,还是那上一篇猫和狗说事儿 function Dog(name,s){ this.name=name; this.sex=s; } Dog.prototype.t ...
 - ISE报警:关键字 unsigned不可用于verilog
			
问题:关键字 unsigned不可用于verilog 解决方案:去掉unsigned
 - spring cloud知识点
			
eureka注册中心(zookeeper,eureka) 也要集群,可以相互注册,网状结构.后面很多高可用的服务都是用这种方式.Eureka的客户端缓存技术 spring boot actuator ...
 - (转)MySQL- 5.7 sys schema笔记,mysql-schema
			
原文:http://www.bkjia.com/Mysql/1222405.html http://www.ywnds.com/?p=5045 performance_schema提供监控策略及大量监 ...
 - Java String StringBuilder StringBuffer
			
String是字符串常量 StringBuilder和StringBuffer都是字符串变量 速度方面:StringBuilder > StringBuffer > String 每当用S ...
 - WPF的布局--StackPanel
			
1. StackPanel是以堆叠的方式来显示控件(从左到右,或者从上到下) 默认是从上到下显示的,并且宽度为StackPanel的宽度,高度自动适应控件中内容的高度(未对控件进行设置时) 如图: 代 ...