mysqlcppconn之ConnectOptionsMap的使用
来源:互联网 发布:威廉 切尔西 知乎 编辑:程序博客网 时间:2024/04/29 19:09
由来
继上一篇文章, 发现之前写的一篇文章中断线重连部分是错误的, 也是现在翻阅了源码才知道
想要自动重连, 必须使用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函数
完结
是不是看起来比较麻烦?
但为了使用扩展功能(动态链接情况下), 只好先这样了
若要避免这个问题, 只能使用静态连接, 且运行库一致, 才可以.
0 0
- mysqlcppconn之ConnectOptionsMap的使用
- 使用MYSQLCPPCONN连接MYSQL数据库与读写BLOB字段
- 使用Visual Studio编译MYSQL CONNECTOR C/C++(MYSQLCPPCONN)
- mysqlcppconn.dll”的激活上下文生成失败 0xc0150002 Microsoft.VC90.DebugCRT
- 怎样调用mysqlcppconn中的escapeString
- Visual Studio 13编译MYSQL CONNECTOR C/C++ (MYSQLCPPCONN)
- android之路之Handler的使用
- GridView使用之RowCommand事件的使用
- NotePad++使用技巧之宏的使用
- MediaPlayer使用之四 VideoView的使用
- DevExpress控件使用之RichEditControl的使用
- Android 资源的使用之Drawble使用
- 使用Smarty之变量信息的使用
- DevExpress控件使用之RichEditControl的使用
- Android studio使用之[gradle的使用]
- NotePad++使用技巧之宏的使用
- Log4j的使用之配置
- php之array的使用
- Android解析xml(3)---Pull解析
- HashMap
- PHP零碎笔记
- drush 安装的问题
- nginx源码初读(11)--让烦恼从数据结构开始(ngx_command/ngx_module/ngx_conf)
- mysqlcppconn之ConnectOptionsMap的使用
- 判断上传图片类型和大小
- jquery ajax监听事件
- Hash表和hashCode()方法
- 服务器返回消息为空iOS
- GCD使用技巧
- java中substring的用法
- 为JDK增加新的jar包
- asp.net MVC 添加验证最优方式