mysqlcppconn之ConnectOptionsMap的使用
生活随笔
收集整理的這篇文章主要介紹了
mysqlcppconn之ConnectOptionsMap的使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
由來
繼上一篇文章, 發(fā)現(xiàn)之前寫的一篇文章中斷線重連部分是錯(cuò)誤的, 也是現(xiàn)在翻閱了源碼才知道
想要自動(dòng)重連, 必須使用ConnectOptionsMap才可以
但由于官方代碼沒有做好導(dǎo)出部分的處理, 直接使用此類型會(huì)造成內(nèi)存異常(跨模塊傳遞STL對(duì)象)
所以本人簡(jiǎn)單的添加了幾個(gè)導(dǎo)出函數(shù), 繞過了這個(gè)問題
添加代碼
在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的命名空間內(nèi), 即最后一個(gè)花括號(hào)內(nèi), 添加以下代碼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; }更多參數(shù)及作用, 請(qǐng)參閱mysql_connection.cpp的MySQL_Connection::init函數(shù)
完結(jié)
是不是看起來比較麻煩??
但為了使用擴(kuò)展功能(動(dòng)態(tài)鏈接情況下), 只好先這樣了
若要避免這個(gè)問題, 只能使用靜態(tài)連接, 且運(yùn)行庫一致, 才可以.
來源:?http://www.voidcn.com/blog/Sidyhe/article/p-5724537.html
來自為知筆記(Wiz)
轉(zhuǎn)載于:https://www.cnblogs.com/jins-note/p/9513566.html
總結(jié)
以上是生活随笔為你收集整理的mysqlcppconn之ConnectOptionsMap的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多校1010 Taotao Picks
- 下一篇: 数据性能调校——查看最耗资源的各种SQL