gpt4 book ai didi

c++ - 使用 MySQL++ 抛出 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-28 07:26:59 25 4
gpt4 key购买 nike

我正在尝试使用以下代码连接到 MySQL 数据库。但是一旦到达“Query query = conn.query()”行,它就会抛出 EXC_BAD_ACCESS。可能是什么原因?提前致谢!

#include <iostream>
#include <mysql++/mysql++.h>

using namespace mysqlpp;

int main(int argc, const char * argv[])
{

try {
Connection conn(false);
if (conn.connect("db", "localhost", "root", "root")) {
Query query = conn.query("select * from django_site");
}
}
catch (BadQuery er) {
std::cerr << "Error: " << er.what();
return -1;
} catch (const BadConversion& er) {
// Handle bad conversions
std::cerr << "Conversion error: " << er.what() << std::endl <<
"\tretrieved data size: " << er.retrieved <<
", actual size: " << er.actual_size << std::endl;
return -1;
} catch (const Exception& er) {
// Catch-all for any other MySQL++ exceptions
std::cerr << "Error: " << er.what() << std::endl;
return -1;
}

return 0;
}

打印conn对象返回

(mysqlpp::Connection) conn = {
mysqlpp::OptionalExceptions = {
exceptions_ = false
}
error_message_ = "\xe5$}\xff\x7f"
driver_ = 0x00007fff5fc005a8
co

更麻烦的是“conn_”变量指向NULL

(mysqlpp::Query) query = {
std::__1::ostream = {
std::__1::basic_ios<char, std::__1::char_traits<char> > = {
std::__1::ios_base = {
__fmtflags_ = 0
__precision_ = 0
__width_ = 0
__rdstate_ = 0
__exceptions_ = 0
__rdbuf_ = 0x0000000000000000
__loc_ = 0x0000000000000000
__fn_ = 0x0000000000000000
__index_ = 0x0000000000000000
__event_size_ = 0
__event_cap_ = 0
__iarray_ = 0x0000000000000000
__iarray_size_ = 0
__iarray_cap_ = 0
__parray_ = 0x0000000000000000
__parray_size_ = 0
__parray_cap_ = 0
}
__tie_ = 0x0000000000000000
__fill_ = 0
}
}
mysqlpp::OptionalExceptions = {
exceptions_ = false
}
template_defaults = {
std::__1::vector<mysqlpp::SQLTypeAdapter, std::__1::allocator<mysqlpp::SQLTypeAdapter> > = size=0 {}
parent_ = 0x0000000000000000
processing_ = false
}
conn_ = 0x0000000000000000
copacetic_ = false
parse_elems_ = size=0 {}
parsed_names_ = size=0 {}
parsed_nums_ = size=0 {}
sbuffer_ = {
std::__1::basic_streambuf<char, std::__1::char_traits<char> > = {
__loc_ = {
__locale_ = 0x0000000000000000
}
__binp_ = 0x0000000000000000
__ninp_ = 0x0000000000000000
__einp_ = 0x0000000000000000
__bout_ = 0x0000000000000000
__nout_ = 0x0000000000000000
__eout_ = 0x0000000000000000
}
__str_ = ""
__hm_ = 0x0000000000000000
__mode_ = 0
}
}

最佳答案

在创建查询之前,您没有检查对 connect() 调用的返回类型。呼唤

Query query = conn.query();

如果 connect() 失败将可能是此异常的原因。

根据手册页http://tangentsoft.net/mysql++/doc/html/refman/classmysqlpp_1_1Query.html将 NULL char* 传递给 Connection::query() 函数是有效的,因为这是默认参数,因此我假设您的数据库连接请求失败。我会检查

的返回类型
conn.connect("db", "localhost", "root", "root");

并仔细检查您传递给此函数的数据库名称、用户名和密码字符串。

此外,检查您的应用程序是否具有以 root 身份连接到数据库所需的权限。

关于c++ - 使用 MySQL++ 抛出 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18595496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com