由来

继上一篇文章, 发现之前写的一篇文章中断线重连部分是错误的, 也是现在翻阅了源码才知道

想要自动重连, 必须使用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的使用的更多相关文章

  1. vc++2013中使用MySQL connector/C++ 1.1.4静态链接报错

    包含头文件 #include <mysql_connection.h> #include <mysql_driver.h> #include <cppconn/state ...

  2. 在CentOS里使用MySQL Connector/C++

    操作系统版本:CentOS6 64位 1,安装boost库.因为MySQL Connector/C++使用了boost库,所以必须先安装boost库,我们才能使用MySQL Connector/C++ ...

  3. VC++2010配置使用MySQL5.6

    0.前提 安装后的文件概览 编译器:  VC++2010 MySQL版本:MySQL5.6.19 for win64 Connector版本:connector  c++  1.1.3 在VS2010 ...

  4. vs2015编译mysql c++ connector

    目前MySQL Connector/C++的binary版本最高只支持VS2008,VS2015需要下载源码自行编译. 1.CMAKE 到官网下载最新的稳定版本 把bin目录添加到环境变量PATH中 ...

  5. 【C++】VS2015/VS2017连接Mysql数据库教程

    要给C++程序连接MySQL数据库,分别需要: 安装MySQL Server 下载MySQL Connector/C++ 在IDE中配置依赖 然后就可以在代码中调用API,来连接以及操作数据库. 一. ...

  6. C++连接MySQL(Windows)

    一般来说,VS下采用微软自身的SQL Server是比较常见的做法,但SQL Server只适合学习,不适合真正应用.在此,我们选择MySQL作为后台数据库.C++语言本身并没有提供访问数据库的东西, ...

  7. 转:C++操作mysql方法总结(1)

    原文:http://www.cnblogs.com/joeblackzqq/p/4332945.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作m ...

  8. C语言连接MySQL数据库(转)

    c++连接MySQL有两种方式,1是原始的方法,2是用 Connector c++ .Connector c++  只是一种封装,使之更加方便. 1.原始方法 这里归纳了C API可使用的函数,并在下 ...

  9. C++操作mysql方法总结(1)

    C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为boo ...

随机推荐

  1. Android Fragment之间的通信(用fragment替换掉XML布局文件中的一个线性布局)

    1.XML布局 (1)主界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...

  2. HTML学习-01

    1.标签描述了基本的链接地址/链接目标,该标签作为HTML文档中所有的链接标签的默认链接. 2.如果<head>里面设置了base,那么后面的img图片需要添加的相对路径. 3.不能使用工 ...

  3. js定时器执行

    第一种:问题请求代表执行打印出来的是什么? //定时器执行页面崩溃 var bo = true; setTimeout(function () { console.log("定时器执行&qu ...

  4. Windows下代替自带cmd的开源软件cmder

    cmder cmder是一个增强型命令行工具,不仅可以使用windows下的所有命令,更爽的是可以使用linux的命令,shell命令 下载 Cmder官网 下载的时候,会有两个版本,分别是mini与 ...

  5. linux忘记root密码怎么办

    如何找回root密码,如果我们不小心,忘记root密码,怎么找回? 思路:进入到单用户模式,然后修改root密码.因为进入单用户模式,root不需要密码就可以登录. 详细过程: 1.打开虚拟机 2.开 ...

  6. Docker 镜像加速

    通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像.该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker ...

  7. VUE 监听局部滚动 设置ICON的位置跟随

    效果图如下: 目的: 为了让 + 号与 - 号跟随在当前 tr 的前边 第一步: 当tr指针经过时获取tr的相对位置 HTML JS 第二步:给滚动的div元素添加滚动事件获取滚动的高度 最后:设置I ...

  8. POST请求出现中文乱码的问题

    最近使用Java的HttpURLConnection请求rest接口时候,POST请求参数中的中文传输之后出现乱码的问题,在网上找了一个亲测有效的方法: 将 DataOutputStream out ...

  9. 读取P12格式证书的密钥

    不想存储p12证书内容,只想存储证书密钥,可通过以下实现读取证书的密钥出来: package com.zat.ucop.service.util; import org.apache.commons. ...

  10. java.lang.RuntimeException: HRegionServer Aborted的问题

    进程情况 [hadoop@hadoop1 hbase]$ jps QuorumPeerMain ResourceManager HMaster NameNode JournalNode HRegion ...