使用sql::ConnectOptionsMap的旧版MySQL连接器C++异常
Legacy MySQL Connector C++ using sql::ConnectOptionsMap exception
我已经花了两天时间试图理解为什么会发生这种情况,但我没有足够的调试技能来理解为什么会出现这种情况。
我需要使用sql::ConnectOptionsMap,这样我就可以传递我想要的连接选项,如字符集等。
举一个简单的例子:
sql::ConnectOptionsMap connection_properties;
connection_properties["hostName"] = sql::SQLString("localhost");
connection_properties["userName"] = sql::SQLString("username");
connection_properties["password"] = sql::SQLString("password");
connection_properties["CLIENT_MULTI_STATEMENTS"] = (true);
sql::Driver * driver = get_driver_instance();
std::unique_ptr<sql::Connection> con(driver->connect(connection_properties));
使用VS 2017编译,正在调试中:
Exception thrown at 0x00007FFFECC811D0 (vcruntime140d.dll) in Demo.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
在创建了一些"迷你转储"之后,我可以看到代码在这里崩溃了:
_NODISCARD static _CONSTEXPR17 int compare(_In_reads_(_Count) const char * const _First1,
_In_reads_(_Count) const char * const _First2, const size_t _Count) noexcept // strengthened
{ // compare [_First1, _First1 + _Count) with [_First2, ...)
#if _HAS_CXX17
return (__builtin_memcmp(_First1, _First2, _Count));
#else /* _HAS_CXX17 */
return (_CSTD memcmp(_First1, _First2, _Count)); <-- HERE
#endif /* _HAS_CXX17 */
}
以前有人遇到过这种情况吗?我搜索了很多,直到现在都找不到有这个问题的人。
我真的不明白为什么会发生这种情况,因为没有任何自定义,只是文档中的一个例子。。。
请告知。
我终于找到了这个问题的答案,这个问题在任何地方都没有记录。只有在静态链接库时,才能使用"sql::ConnectOptionsMap connection_properties;">。(mysqlcppconnen-static.lib)
我是怎么发现的?以下是来自以下网站的精彩信息:http://www.voidcn.com/article/p-yltwwlte-pd.html
报价:
接口中使用的字符串都是SQLString。尽管它是std::string的进一步包装,不可能传递std::字符串对象作为参数。因为这是一种动态链接方式DLL中的内存管理与EXE没有连接。通过过去的对象将导致异常:bad_alloc
但是,我测试了文章中的代码,并将其添加到mysql_connection.cpp中,错误已经消失,但仍然无法工作。
我的警告:
我正在构建我自己的"调试"版本的mysql连接器cpp主机,由于某些原因,编译没有"如预期的那样"。例如,在我的编译中,"mysqlcppconn-static.lib"不能编译为Debug,只能编译为"RelWithDebInfo",并且只有10MB,而"官方"的是64MB。
结论:
您必须从MySQL网站静态链接发布版本(mysqlcppconn-static.lib)才能使用"sql::ConnectOptionsMap"。我真的希望他们能清醒过来,为人们和文档制作一个合适的库。
如果我能找到一种在调试模式下构建它的方法,我会发布一个更新。
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 使用mysql c++连接器的未定义引用
- MySQL C++连接器链接错误
- C++MySQL连接器没有utf8
- MySQL 连接器/C++.尝试在此过程中停止连接到数据库
- MySQL C++连接器循环
- MySQL c++ 连接器:使用 SetBlob() 在查询中设置多个 blob 数据的正确方法是什么?
- 在 C/C++ 中使用 MySQL 连接器执行插入到表时出错
- 无法在我的ubuntu中正确安装MySQL连接器/c++
- 在 MySQL 连接器C++ API 中使用一个函数调用执行多个查询的正确方法是什么?
- mysql c ++连接器异常:用户"root"@'localhost'的访问被拒绝(使用密码:NO)&&MySQL服务器已消失
- MySQL 连接器 CPP 在 CentOS 6 中未定义的引用
- MySQL C++连接器:添加符号时出错:文件格式无法识别
- MySQL连接器C 结果集被缓冲
- 在 mysql 连接器中对 mysqlx 函数的未定义引用
- 更新MySQL连接器后,隐式转换停止工作
- 批量插入 Mysql C++连接器
- 使用MySQL C 连接器从C 代码访问MEMSQL
- Visual Studio 2017 中的 MySQL 连接器/C++ 错误"Unresolved external symbol _get_driver_instance"
- MySQL连接器/C 带有Mariadb