VS2010下用c++連接mysql 配置


項目需要,需要用c++連接mysql數據庫,這里是官方給出的在VS下的連接步驟:http://dev.mysql.com/doc/refman/5.6/en/connector-cpp-apps-windows-visual-studio.html

但我在連接過程中,發現官網給出的步驟有些問題,現總結我的連接步驟如下,同時指出官網連接教程中的一些出入。

1、下載安裝mysql(http://dev.mysql.com/downloads/),安裝時注意最好選擇安裝Connect/c++。嚴格來說等到后面再在官網下載單獨的Connect/c++安裝也行,但我自己安裝過程中發現,在官網中下載的Connect/c++的zip免安裝版,解壓后里面沒有“lib\opt”這個文件夾,而這個里面的內容是我們后續連接要用的。若下載Connect/c++的.msi安裝版本也存在同樣的問題。

2、下載並解壓縮boost庫(http://www.boost.org/),mysql Connect/c++ 里用到了智能指針,所以需要boost庫。當然,你也可以注釋掉Connect/c++里相關頭文件里用到boost庫的地方,這樣就不用智能指針了,不過建議最好保留。

3、下面就是相關的環境設置,假設mysql安裝目錄為C:\Program Files\MySQL; 而boost庫的目錄為C:\Program Files\boost_1_54_0。我只設置成功了動態鏈接的配置,靜態鏈接下我沒試成。

動態鏈接

     動態鏈接的debug設置和release設置是相同的,具體如下:

   (1)項目屬性頁,“c/c++”-"常規"-“附加包含目錄”添加相關頭文件路徑:

           C:\Program Files\boost_1_54_0

           C:\Program Files\MySQL\Connector C++ 1.1.3\include

   (2)項目屬性頁,“鏈接器”-“常規”-“附加庫目錄”添加庫文件mysqlcppconn.lib的路徑

           C:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt

         “鏈接器”-“輸入”-“附加依賴項”添加庫文件

           mysqlcppconn.lib

          

  (3)將目錄C:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt下的文件mysqlcppconn.dll(1.1.3版本,該文件大小為582KB),以及目錄C:\Program Files\MySQL\MySQL Server 5.6\lib下的文件libmysql.dll,拷貝到工程的debeg(或者release)目錄下。

    通過以上步驟,就完成了c++動態鏈接mysql的基本環境配置,可在官網找相關示例(http://dev.mysql.com/doc/refman/5.6/en/connector-cpp-examples-complete-example-1.html)直接測試。

     和官網給出的步驟的不同點:

    (1)官網是要求在附加包含目錄和附加庫目錄里分別添加路徑C:\Program Files\MySQL\MySQL Server 5.6\include和路徑C:\Program Files\MySQL\MySQL Server 5.6\lib,附加依賴項添加libmysql.lib。但我試驗過,確實不需要。c++連接mysql的相關頭文件都在路徑C:\Program Files\MySQL\Connector C++ 1.1.3\include下,並不需要再添加C:\Program Files\MySQL\MySQL Server 5.6\include下的頭文件。此外,運行只需要動態連接libmysql.dll庫即可,編譯的時候並不需要添加libmysql.lib。

    (2)官網debug和release的配置是不同的,具體分別在附加庫目錄,debug是添加路徑C:\Program Files\MySQL\Connector C++ 1.1.3\lib\debug,而release是C:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt,同時debug下拷貝mysqlcppconn.dll也是拷貝路徑C:\Program Files\MySQL\Connector C++ 1.1.3\lib\debug下的那個mysqlcppconn.dll文件(1.1.3版本下該文件為966KB),但我試驗發現,這樣設置debug版本是不能正常運行的。一個奇葩的地方是,我附加庫目錄用C:\Program Files\MySQL\Connector C++ 1.1.3\lib\debug,但mysqlcppconn.dll是拷貝C:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt下的文件mysqlcppconn.dll(1.1.3版本,該文件大小為582KB),卻能正常運行。。完全石化了

 

靜態鏈接

   靜態鏈接,區別就是不需要拷貝mysqlcppconn.dll到工程目錄,同時將附加依賴項mysqlcppconn.lib改為mysqlcppconn-static.lib,另外需要在”c/c++“-"預處理器"-”預處理器定義“中添加一行”CPPCONN_PUBLIC_FUNC=“,但我按照上面這些做了,還是出現無法解析相關庫函數的鏈接錯誤,不明所以。有待以后有空慢慢研究。

 

附上測試代碼

#include "stdafx.h"
#include <mysql_connection.h> #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { try { sql::Driver *driver; sql::Connection *con; sql::Statement *stmt; sql::ResultSet *res; sql::PreparedStatement *pstmt; driver = get_driver_instance(); con = driver->connect("localhost", "user_name", "password"); //選擇要連接的數據庫 con->setSchema("test"); //設置字符格式 con->setClientOption("characterSetResults", "utf8"); stmt = con->createStatement(); res = stmt->executeQuery("SELECT * from user"); //遍歷結果集 while (res->next()) { //這里的ID是user表中的字段名 int id = res->getInt("ID"); cout<<id<<endl; } delete res; delete stmt; delete con; } catch (sql::SQLException &e) { //有異常的情況下,輸出異常 cout << "# ERR: SQLException in " << __FILE__; cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl; cout << "# ERR: " << e.what(); cout << " (MySQL error code: " << e.getErrorCode(); cout << ", SQLState: " << e.getSQLState() << " )" << endl; } return 0; }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM