VS2010下用c++鏈接mysql 配置

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

但我在鏈接過程當中,發現官網給出的步驟有些問題,現總結個人鏈接步驟以下,同時指出官網鏈接教程中的一些出入。mysql

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

二、下載並解壓縮boost庫(http://www.boost.org/),mysql Connect/c++ 裏用到了智能指針,因此須要boost庫。固然,你也能夠註釋掉Connect/c++裏相關頭文件裏用到boost庫的地方,這樣就不用智能指針了,不過建議最好保留。sql

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

動態連接windows

     動態連接的debug設置和release設置是相同的,具體以下:app

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

           C:\Program Files\boost_1_54_0visual-studio

           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;
}
相關文章
相關標籤/搜索