Mysql Connector connect()问题

时间:2016-09-13 19:04:56

标签: c++ mysql

我有一个小型的C ++项目,需要从中访问mySQL DB,所以我已经设置了mySQL Connector for C ++。 这是在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)

“主机”有时会有所不同,即使我不在代码中更改它。这似乎在内部读出了应有的不同内存位置。 但即使我在调用它时直接传递connect()变量,我也会收到此错误。在mysql类中内部保存这三个变量并使用它们调用connect()。

时也是如此

任何人都知道可能导致这种情况的原因是什么?我在一个不同的项目中有类似的实现,这确实很好用,所以我有点困惑:/

2 个答案:

答案 0 :(得分:0)

这是一个与您的情况相符的post(C ++连接器适用于Linux,在OSX上失败)。

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

答案 1 :(得分:0)

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

根据提示,我重新编译了myscl 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数据库的非常低效的访问。

祝所有遇到同样事情的人好运..