Mysql连接器connect()问题



我有一个小的c++项目,需要从它访问mySQL数据库,所以我已经为c++设置了mySQL连接器。这是在OS X 10.10上完成的,并且我在编译/链接方面没有问题。

我已经为所有mysql的东西写了一个类,并在构造函数我想设置连接到db。然而,这似乎有点困难。

下面是类的相关部分:

class mysql{
public:
  mysql(std::string server, std::string user, std::string password);
private:
  sql::mysql::MySQL_Driver *driver;
  sql::Connection *con;
  std::string last_error = "";
};

这里是实现:

mysql::mysql(std::string server, std::string user, std::string password){
  driver = sql::mysql::get_mysql_driver_instance();
  try{
    con = driver->connect(server, user, password);
    last_error = "";
  }
  catch(sql::SQLException &e){
    last_error = e.what();
  }
}

但是,当我像这样创建该类的对象时:

mysql db("tcp://127.0.0.1:3306", "root", "secretsecret");

然后在我的last_error字符串中有这个:

未知MySQL服务器主机'???' (0)

"host"有时不一样,即使我没有在代码中改变它。这似乎是内部不同的内存位置被读出,因为它应该是。但是,即使我在调用它时直接传递connect()变量,我也会得到这个错误。同样,在mysql类内部保存这三个变量并使用它们调用connect()。

有人知道是什么原因导致的吗?我在一个不同的项目中有一个类似的实现,它确实工作得很好,所以我有点困惑:/

这是一个符合你的情况的帖子(c++连接器在linux上工作,在OSX上失败)。

使用mysql日志/跟踪或在调试器中运行它,您可能能够收集更多的信息报告给mysql开发人员。你可能会更走运。

经过长时间的谷歌搜索,我发现这是最有用的链接:https://apple.stackexchange.com/questions/251290/weird-behaviour-of-mysql-connector-c-in-osx

根据提示,我重新编译了mysql c连接器,然后是mysql c++连接器(1.1.6版本导致1.1.7版本在编译时导致json错误)。

我还在c++连接器的cmake日志中看到Xcode.app/Contents/Developer/Toolchains/XcodeDefault。使用Xctoolchain/usr/bin/c++编译库。

所以我在我的编译中也使用了这个。这可能会起作用,但我也在我的项目中包含了wxwisgeds,导致这个错误:

/usr/local/include/wx-3.0/wx/strvararg.h:30:18: fatal error: 'tr1/type_traits' file not found
    #include <tr1/type_traits>

我找到了一些提示,但是它们都产生了大量的新错误,所以我不再深入挖掘了。

我最好的选择是创建两个独立的程序,一个与mysql通信,一个提供gui,让它们通过套接字或文件相互通信,提供对mysql数据库的非常低效的访问。

祝遇到同样事情的人好运。

最新更新