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 ...
随机推荐
- git 修改配置
git config 查看配置信息 config 配置项帮助信息 $ git config config 配置有system级别 global(用户级别) 和local(当前仓库)三个设置项 从sys ...
- Shiro在SpringBoot中的使用
Demo代码请参考:https://github.com/roostinghawk/ShiroDemo 以下为主要代码(经过验证,测试) 1. pom.xml:引用shiro <dependen ...
- CDH集群安装配置(二)- 公共环境的配置和虚拟机的克隆
1. 配置网络-ip地址设置静态 vi /etc/sysconfig/network-scripts/ifcfg-eth33 增加如下配置 ONBOOT=yes BOOTPROTO=static IP ...
- Centos 7搭建Gitlab服务器(一),搭配文章(二)一起使用,效果更好
一. 安装并配置必要的依赖关系在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问. 1.安装ss ...
- Java获取永久图文素材中的网页端Url
package com.epalmpay.test; import com.alibaba.fastjson.JSON;import com.epalmpay.util.HttpClientUtil; ...
- thymeleaf常用语法
常用标签语法:①th:text<span th:text="${name}">1</span>注释:如果${name}有值则将替换掉1的值,若无则为1 ②t ...
- openerp学习笔记 模块结构分析
以OpenERP7.0中的 hr_expense 模块为例: 如图中代码所示: __init__.py :和普通 Python 模块中的__init__.py 作用相同,主要用于引用模块根目录下的.p ...
- SC OpenService 失败5:拒绝访问
当我们在cmd里使用 sc delete 服务名 ,来删除服务的时候,报错误,SC OpenService 失败5:拒绝访问. 这似乎是因为权限不够,解决方法. 首先,我们必须先取得管理员权限,以 ...
- MySQL prompt提示符总结
A counter that increments for each statement you issue \D 当前日期 \d 当前数据库 \h 数据库主机 \l The current de ...
- Imgproc.findContours函数
OpenCV里支持很多边缘提取的办法,可是如何在一幅图像里得到轮廓区域的参数呢,这就需要用到findContours函数,这个函数在OpenCV4Android的原型为: void org.openc ...