由来

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

想要自动重连, 必须使用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函数

完结

是不是看起来比较麻烦?

但为了使用扩展功能(动态链接情况下), 只好先这样了

若要避免这个问题, 只能使用静态连接, 且运行库一致, 才可以.

来源: http://www.voidcn.com/blog/Sidyhe/article/p-5724537.html
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/jins-note/p/9513566.html

mysqlcppconn之ConnectOptionsMap的使用相关推荐

  1. cpp mysql_使用MYSQLCPPCONN连接MYSQL数据库与读写BLOB字段

    起初也是用C语言接口, 但不知为什么在VS2010下使用时调用mysql_thread_init()函数总是失败(动态链接) 其他函数也用不了, 用了一阵子的ODBC但不会操作BLOB字段 遂转到MY ...

  2. 无法打开包括文件:“mysql..h”: No such file or directory

    出现这个问题后,根据网上提供的方法做了很多,但都没有用.后来在盘里面找了一下确实没有mysql.h这个文件,原来mysql必须选择complete安装方式才会有这个头文件.首先重新安装了一次mysql ...

  3. c++ 操作mysql_C++操作mysql方法总结(1)

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

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

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

  5. linux mysql connector_fd_在CentOS里使用MySQL Connector/C++

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

  6. C++中序列化对象并存储到mysql

    1.序列化 C++序列化存在多种方式,我这里使用的boost,推荐看一个简单的教程. boost方法就是在类定义中添加一个友元类对象,并实现serialize()方法就可以让该类变为可序列化类.要使用 ...

  7. C++连接MySQL(Windows)

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

  8. MySQL Connector/C++入门教程(上)

    转载原文:http://blog.csdn.net/jgood/article/details/5661339 原文地址: http://dev.mysql.com/tech-resources/ar ...

  9. c++ datetime mysql_转:C++操作mysql方法总结(1)

    项目中使用的数据库名为booktik 表为book ---. (共有30条记录,只列出了部分记录,14-30未列出) 一.通过mysql的C api进行操作 1.新建一个空项目 2.将D:\Progr ...

最新文章

  1. rpc进程Linux,linux RPC 测试(转载)
  2. linux .net core java_仅在.NET Core 2.0运行时的Linux上缺少运行时存储库错误
  3. linux 修改默认路径吗,linux中vsftp修改默认路径
  4. HTTP和HTTPS的了解
  5. ES curator离线安装与部署
  6. 巴铁 无人驾驶_巴铁?Clip-air?请查收汽车的最新玩法
  7. C# DDOS攻击代码
  8. fullCalendar:中文API
  9. 什么情况下document.write会覆盖页面及覆盖原理解释
  10. WINDOWS 服务端 SVN自动部署/一键批处理 SVN 更新项目
  11. python爬虫实例(一) b站篇
  12. Mac下adb不能重启
  13. 繁体字生僻字数据库报错处理
  14. K8S CRD 资源对象删除不掉
  15. Python——程序设计:商贷月供计算器
  16. 关于GX WORKS2中M8002、M8012、M8013无法使用的问题
  17. 提取小米手机的备份数据
  18. android 获取屏幕旋转方向,android获取手机屏幕尺寸和旋转方向
  19. leetcode406:const、、static
  20. java物流系统_java 物流管理系统

热门文章

  1. deepin关机卡在图标界面 mysql Community...10min
  2. Luogu P2920 时间管理【二分答案】
  3. Android为TV端助力context转换类型
  4. 阿里大鱼.net core 发送短信
  5. 事务中SET XACT_ABORT各种用法
  6. 大理,风花雪月俏丽金花
  7. shell脚本[] [[]] -n -z 的含义解析
  8. BZOJ2843: 极地旅行社
  9. python3.6升级及setuptools、pip安装
  10. Win10開始菜单打不开