0

我正在尝试使用以下代码连接到 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
  }
}
4

2 回答 2

1

在创建查询之前,您没有检查对 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.

于 2013-09-03T15:05:24.100 回答
0

我应该早点回帖。对于遇到同样问题的其他人来说,错误的原因对我来说很愚蠢。原来我使用的是 C++11 的 std 库,但 MySQL++ 最初并不是针对它编译的。使用更新的 std lib 重新编译 MySQL++ 可以解决问题。

于 2013-10-09T18:26:21.460 回答