C++連接Mysql(使用mysql connector c++)

轉載請註明出處,原文地址http://blog.csdn.net/zenki_kong/article/details/44810535

成功編譯和連接,網上的教程我看了很多還是不成功,也看到好多人使用connector c++連接Mysql出現各種問題(諸如無法解析外部符號等),經過我的多番嘗試,終於成功了

本文寫的是使用mysql connector c++的方式進行C++連接MYSQL,如果想了解使用mysql API連接的請看我另一篇博客http://blog.csdn.net/zenki_kong/article/details/44810243

 

本文使用64位C++程序+64位的connector還有Mysql,32位的話應該更簡單

之所以喜歡用connector的原因,是因爲太方便了,跟直接操作mysql沒什麼區別

 

先交代一下環境,VS2013+64位MySql5.6.23安裝版+Boost1.57(connector1.1版本後好像都需要用到這個庫)+64位WIN7

 

1.首先說一下爲何如此多人都出現編譯報錯,諸如無法解析的外部符號XXX等等,還找不到解決方法,這個可能是你的鏈接庫和包含文件沒包含正確,還很有可能是這個原因

媽媽的。。。這個問題也困擾了我很久。。。後來我想起了之前用mysql api也出現類似的問題。。然後就找到原因了。。。請看下圖

這是我安裝完64位後的mysql5.6.23...大家有沒有發現很明顯的問題。。。那就是除了mysql主體是64位,其他組件都是32位,我們要用到的connector c++也是32位的!

如果你的程序是64位的,當然是用不了32位的庫,然後就出現無法解析的外部符號XXX的咯(ˉ﹃ˉ),感覺被甲骨文坑慘了。。。

如果你是32位的程序,那就可以無視這個問題了,如果你是64位的,,,要另行去官網下載64位版的connector c++……

 

這個是我用的64位1.1.5版本

 

 

安裝完後我們再看看

connector c++變64位了,這就對了。。。

 

2.首先肯定是安裝Mysql了,如果你使用WAMP或者PHPSTUDY等集成工具,應該是沒有mysql connector的,去官網下一個吧,解壓版或者安裝版的也行,32位還是64位一定要跟你的c++程序一致,如果你是開發64位程序,就算是安裝版那你也要去單獨下一個64位版本的connector c++,原因就在第一點

 

3.下載Boost庫,和安裝,具體步驟如下

(1)到http://www.boost.org/下載Boost,這是我下載的版本http://jaist.dl.sourceforge.net/project/boost/boost/1.57.0/boost_1_57_0.zip

(2)安裝這個也有點繁瑣,跟着我來吧,首先把下載下來的壓縮文件解壓到你喜歡的地方,這個地方就是用來放boost庫的了

(3)然後打開CMD命令控制檯,進入到boost目錄,打開bootstrap.bat

執行完後會發現Boost目錄下多了個bjam.exe程序

打開這個bjam程序進行Boost安裝,這個過程需要10-20分鐘不等,具體我就不知道了,反正等了好久我就去歇了會……

到此,Boost庫就安裝成功了

 

4.繼續我們的主題,打開VS2013,建起或打開你的程序,首先務必請選擇你的平臺,是32位還是64位,如果是64位,你需要轉換一下,如下圖

打開配置管理器

右上角活動解決方案平臺點新建

 

5.設置包含的文件和庫,先給大家看看我的mysql目錄

 

我的mysql主程序是裝載根目錄的,你們的include和lib大概在mysql server裏面,可以明顯看到,我把64位和32位的connector c++都裝了

(1)設置包含的文件和庫,打開VS2013工程項目,打開項目-屬性

包含的文件目錄和庫目錄,各3個,請根據自己的路徑來設置

6.上代碼,當然你要事先建一個表來測試,至於函數的使用就自行度娘吧,之所以喜歡用connector的原因,是因爲太方便了,跟直接操作mysql沒什麼區別

 

#include<iostream>
#include<winsock2.h>
#include <mysql_connection.h>
#include <mysql_driver.h>
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
#pragma  comment(lib,"debug\\mysqlcppconn.lib")
using namespace std;

int main()
{
	sql::mysql::MySQL_Driver *driver;
	sql::Connection *conn;
	sql::Statement *state;
	sql::ResultSet *result;
	driver = sql::mysql::get_driver_instance();
	conn = driver->connect("localhost", "root", "root");
	state = conn->createStatement();
	state->execute("use dnd");
	result = state->executeQuery("select * from user");
	//// 輸出查詢  
	while (result->next()!=NULL)
	{
		cout<<result->getString("account")<<endl;
	}
	Sleep(10000);
	return 0;
}

 

 

 

7.這時編譯調試彈出一個缺少mysqlcppconn.dll的錯誤

解決方法:把對應版本(Debug/Release)的mysqlcppconn.dll放到生成的exe目錄下(注意如果你切換了x64平臺,你可能創建了新的解決方案目錄,這時應該放在x64\debug(release)目錄下,裏面有生成64位exe程序),反正mysqlcppconn.dll一定要跟對應版本(是32還是64位,是Debug還是Release)的exe放一起。

 

再編譯調試,這時又有問題(ˉ﹃ˉ)……缺少msvcp100d.dll和msvcr100d.dll,我用VS2013有這個問題,用VS2010的同學不知道有木有這個問題呢?

解決方法:去度娘搜索下一個吧,注意要下對應的版本,32位和64位要區分,不然會出錯

64位的:http://download.csdn.net/download/chinaworker/5766637(親測可用)

32位的親自己去找找吧,我懶……(─.─|||

8.再次編譯運行……終於成功了!!!

 

表示真的很繁瑣,也很容易出錯,看了網上好多教程也搞不好,最後自己苦拼一兩天,終於不負有心人……

如果按照本文章來做還出現問題,歡迎跟帖回覆,也請仔細看看文章看看是不是哪裏設置不對了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章