deleter mysql,mysqlcppconn 之 ConnectOptionsMap 的使用

mysqlcppconn 之 ConnectOptionsMap 的使用

由来

继上一篇文章 http://www.voidcn.com/blog/Sidyhe/article/p-5724536.html , 发现之前写的一篇文章 http://www.voidcn.com/blog/Sidyhe/article/p-1645553.html 中断线重连部分是错误的, 也是现在翻阅了源码才知道

想要自动重连, 必须使用 ConnectOptionsMap 才可以

但由于官方代码没有做好导出部分的处理, 直接使用此类型会造成内存异常 (跨模块传递 STL 对象)

所以本人简单的添加了几个导出函数, 绕过了这个问题

添加代码

在 connection.h 中, 找到

typedef std::map<:sqlstring connectpropertyval> ConnectOptionsMap;

在下面紧接着添加CPPCONN_PUBLIC_FUNCConnectOptionsMap*ConnectOptionsMap_New();

CPPCONN_PUBLIC_FUNCvoidConnectOptionsMap_Delete(ConnectOptionsMap*obj);

CPPCONN_PUBLIC_FUNCvoidConnectOptionsMap_Set(ConnectOptionsMap*obj,constchar*k,constVariant&v);

在 mysql_connection.cpp 中, 文件最后, sql 的命名空间内, 即最后一个花括号内, 添加以下代码CPPCONN_PUBLIC_FUNCConnectOptionsMap*ConnectOptionsMap_New()

{

returnnewConnectOptionsMap;

}

CPPCONN_PUBLIC_FUNCvoidConnectOptionsMap_Delete(ConnectOptionsMap*obj){

deleteobj;

}

CPPCONN_PUBLIC_FUNCvoidConnectOptionsMap_Set(ConnectOptionsMap*obj,constchar*k,constVariant&v){

(*obj)[k]=v;

}

编译, 取出 dll 和 lib 文件, 搞定.

如何使用sql::Connection*CSqlWorker::NewSqlObject()

{

try

{

typedefdecltype(sql::ConnectOptionsMap_Delete)*TConnectOptionsMap_Deleter;

std::unique_ptr<:connectoptionsmap>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")));

returnm_driver->connect(*Maps.get());

}

catch(sql::SQLExceptione)

{

_ASSERT(0);

}

returnNULL;

}

更多参数及作用, 请参阅 mysql_connection.cpp 的 MySQL_Connection::init 函数

完结

是不是看起来比较麻烦?

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

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

来源: http://www.bubuko.com/infodetail-2736680.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值