這幾天一直在嘗試c++連接mysql,嘗試了mysql c api以及mysql connector c++ 這2種方法(還有一種方法是使用ado,但是撸主比較懶,還是喜歡比較直接點的方法),然而mysql c api 編譯通過但是運行怎麼都不行,所以換成了mysql connector c++ 這種方式。接下來我將會記錄我在配置vc2010的過程
0x00 環境
IDE:vc2010
c++庫:boost(使用mysql connector c++需要先配置boost庫),mysql connector c++ 1.1.5
數據庫:mysql5.6
0x01 安裝boost庫以及mysql connector c++
首先下載boost庫以及mysql connector c++(這2項都能再各自的官網上下到,就不提供鏈接了)
安裝boost庫,下載完boost-1.58.zip ,解壓縮後運行bootstrap.bat,運行完成後會多出b2.exe以及bjam.exe這2個可運行程序,這裡我們只需接著運行bjam.exe(這個程序運行的時間會比較長,可以看一集銀魂的說^_^),結束後你可以把總的文件貼到你需要的文件夾內。
至於mysql connector c++,我直接下載的是.msi安裝文件,安裝即可,默認目錄為C:\Program Files\MySQL\MySQL Connector C++ 1.1.5
至此需要的文件已安裝完畢,接下來就是配置vc2010了。
0x02 配置vc2010
1.首先創建一個空的工程,並添加一個cpp文件。
2.為當前工程添加目錄
找到配置選項頁:
首先我們需要確認你的mysql版本以及mysql connector c++的版本是32位還是64位,如果是均為64位,我們需要將vc2010的平台設置為64位的,不然 編譯無法通過。
Project-->Properties選項頁中有Pllatform這個選項,默認為一開始創建的32位,點擊Configuration Manager修改為64位
Project-->Properties-->C/C++ 選擇General 裡的Additional Include Directories 添加mysql connector c++ 的include 文件夾以及boost的文件夾
Project-->Properties-->Linker 選擇General 裡的Additional Library Directories 添加mysql connector c++ 的lib 文件夾以及boost的libs文件夾
Project-->Properties-->Linker 選擇Input 裡的Additional Dependencies 添加mysqlcppconn.lib
至此我們已經完成了vc2010的配置
0x03 驗證
接下來就是驗證環境是否已成功配置,我們可以寫入以下的測試代碼(首先要確保mysql有測試的database)
#include <iostream> #include "mysql_driver.h" #include "mysql_connection.h" #include "cppconn/driver.h" #include "cppconn/statement.h" #include "cppconn/prepared_statement.h" #include "cppconn/metadata.h" #include "cppconn/exception.h" using namespace std; using namespace sql; int main() { sql::mysql::MySQL_Driver *my_driver = 0; sql::Connection *connect = 0; try//嘗試連接testdb數據庫 { my_driver = sql::mysql::get_mysql_driver_instance(); connect = my_driver->connect("tcp://localhost:3306/testdb", "root", "12345678"); cout << "connect success!" << endl; } catch (exception e)//連接失敗 { cout << "connect fail!" << endl; } //取出示例數據 sql::Statement* stat = connect->createStatement(); stat->execute("set names 'gbk'"); ResultSet *res; res = stat->executeQuery("SELECT * FROM user"); while (res->next()) { cout << "ID:" << res->getString("id") << endl; cout << "NAME:" << res->getString("name") << endl; } if (connect != 0)//釋放連接 { delete connect; } getchar(); }
0x04 結尾
mysql c api估計也是版本問題,編譯明明能通過,however, there is no egg use。所以遇到實在無法解決的問題可以嘗試著換另一種方法(技術太渣,ouduok)