2016-09-13 73 views
0

我有一個小型C++項目,需要從中訪問一個mySQL DB,所以我已經爲C++設置了mySQL連接器。 這是在OS X 10.10上完成的,我沒有遇到編譯/鏈接問題。Mysql連接器connect()問題

我已經寫了所有的mysql的東西的類,並在構造函數中我想建立到數據庫的連接。但是,這似乎很艱難。

下面是相關的部分從類:

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字符串中有這個:

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

「主機」有時甚至不同,即使我不在代碼中改變它。這看起來像是在內部讀取不同的內存位置,因爲它應該是。 但即使我直接傳遞connect()變量時,我得到這個錯誤。將這三個變量內部保存在mysql類中並使用它們調用connect()時也是如此。

任何人有一個想法可能會導致這種情況?我有一個類似的實現在一個不同的項目中,這可以很好地工作,所以我有點困惑:/

+0

看起來像傳遞「服務器」的內存損壞。 – blackpen

+0

葉這就是我的想法,但我不知道爲什麼它會損壞.. –

+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 C連接器,然後將MySQL的C++連接器(版本1.1.6原因1.1.7引起編譯時出現json錯誤)。

我也在C++連接器的cmake日誌中看到Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++被用來編譯庫。

所以我用那一個也是我的彙編。這可能是因爲這會工作,壽在我的項目IM還包括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數據庫訪問。

對任何遇到同樣事情的人來說,祝你好運。