2016-09-13 2 views
0

У меня есть небольшой проект на C++ и мне нужно получить доступ к нему из базы mySQL, поэтому у меня есть настройка mySQL Connector для C++. Это делается на OS X 10.10, и у меня нет проблем с компиляцией/компоновкой.Mysql Connector connect() issues

Я написал класс для всего материала 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"); 

Тогда у меня это в моей последней строке:

Unknown MySQL server host '???' (0)

«Хост» иногда отличается даже тем, что я не изменяю его в коде. Похоже, что внутренне другое место памяти считывается так, как должно быть. Но даже если я передаю переменные connect() непосредственно, когда я его вызываю, я получаю эту ошибку. То же самое, сохраняя эти три переменные внутри класса mysql и используя их для вызова connect().

У кого-нибудь есть идея, что может вызвать это? У меня аналогичная реализация в другом проекте, где это работает отлично, поэтому я не смущен:/

+0

Это похоже на повреждение памяти, где передается «сервер». – blackpen

+0

Ye thats, что я думал, но я понятия не имею, почему он поврежден. –

+0

Вы можете создать минимальный тестовый пример, воспроизвести проблему, затем перейти в отладчик и разбить код на ** MySQL_Driver :: connect **. Это то место, где вы хотите напечатать ** hostName **. – blackpen

ответ

0

Вот post, который соответствует вашим обстоятельствам (коннектор C++ работает на Linux и не работает в OSX).

С использованием mysql регистрации/трассировки или запуска его в отладчике вы можете собрать дополнительную информацию для отчетов разработчикам mysql. Возможно, вам повезет больше.

0

После долгого времени googeling я нашел это наиболее полезная ссылка: https://apple.stackexchange.com/questions/251290/weird-behaviour-of-mysql-connector-c-in-osx

После намеков там, я перекомпилировал разъем myscl С, а затем в MySQL C++ разъем (версия 1.1.6 причина 1.1.7 вызвана ошибка json при компиляции).

Я также видел в журналах cmake C++-коннектора, что 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> 

я нашел некоторые подсказки для этого один, но все они просто произвела количество Massiv новых ошибок, поэтому я остановился копая глубже здесь.

Мои лучшие варианты состоят в том, чтобы создать две отдельные программы, чтобы общаться с mysql и один, чтобы предоставить gui и позволить им обмениваться информацией друг с другом через сокеты или файлы, обеспечивающие очень неэффективный доступ к mysql db.

Удачи всем, кто сталкивается с тем же.