C++連接MYSQL數據庫(使用MYSQL API方式,環境VS2013+MYSQL5.6)

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

首先交代一下開發環境,64位mysql5.6.23+VS2013+64位WIN7,32位的話大同小異

本篇是直接使用mysql api,下一篇博客應該會講使用mysql connector c++來讓c++連接mysql

mysql connector c++連接mysql 請看:http://blog.csdn.net/zenki_kong/article/details/44810535


剛開始寫博客,博主還只是個大三汪,學藝不精,如有錯誤還請前輩指出(>^ω^<),廢話不多說啦,進入正文

一開始用mysql5.7.6提示缺少binary_log_types.h,搜了整個文件夾都沒這個文件,於是就用5.6吧


1.要使用mysql的api,需要mysql目錄下include和lib兩個文件夾的東西,如果你用的是wamp或者phpstudy,裏面的mysql可能沒這兩個文件夾,那麼去下個解壓版的mysql就可以了,我用的是64位的mysql5.6.23安裝版

 

2.這點很重要,先提前把這個說了

博主一開始就卡在這裏,就說怎麼編譯不通過呢(ㄒoㄒ)//,各種無法解析外部符號,研究了半天,發現原因在於數據庫是64位版的,而程序平臺是32位的(畢竟我開發經驗沒多少……(>﹏<))。所以我們要先設置一下平臺,如果你是32位的Mysql,大概可以跳過這步。


打開配置管理器

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


 

3.在vs2013中打開項目-屬性,把include和lib兩個文件夾包含進來,具體路徑看個人吧,如果你是安裝版,就在mysql server根目錄下(我是直接安裝在mysql根目錄)。如果你是包含了之後再改64位/32位平臺,可能要重新包含一次,所以我提前說了平臺問題。

先來看看這兩個文件夾有啥


然後包含進來


4.把lib文件夾裏的 libmysql.dll 複製到你的項目目錄中(就是放h和cpp的那裏)

 

5.外面的事情解決完了,最後就是代碼了

首先是要包含的頭文件和庫,聽說頭文件順序交換會有問題,你們可以試試,因爲我項目本身很早就包含了winsock2.h,就不試拉,我也很懶的(^。^)y-~~

#include <WinSock2.h>
#include "mysql.h"
#pragma comment(lib,"wsock32.lib")
#pragma comment(lib,"libmysql.lib")

然後就是測試用的主要代碼,當然測試之前你需要建立一個表,類和函數使用之類就自行度娘查吧。。。其實也很顯然易懂

定義三個變量

MYSQL mysql;
MYSQL_RES *result;
MYSQL_ROW row;

然後是數據庫操作的代碼

mysql_init(&mysql);
mysql_real_connect(&mysql, "localhost", "root", "root", "dnd", 3306, NULL, 0);
char *sql = "select * from user";//unicode下用Cstring會很麻煩,直接用char
mysql_query(&mysql, sql);
result = mysql_store_result(&mysql);
while ((row = mysql_fetch_row(result))!=NULL)
{
    ShowText(row[1]);//這裏是個顯示的函數,控制檯可以用cout
}


上面的代碼,沒有過多的錯誤檢測,因爲幾行代碼而已,有問題的話註釋測測吧,可以使用

unicode下用Cstring會很麻煩,直接轉換類型是不行的(只會保留第一個字符),於是查詢語句就出錯咯

 

順便給初學者留個問題,這句會造成內存泄漏嗎(大神就無視吧哈)

char *sql = "select * from user";

sql="I am Zenki Kong"//那加多這一句呢?會不會造成內存泄漏?

 

至此,如無意外就成功了!!!

但是個人感覺使用connector連接用起來更加方便,所以寫完這個博客後我已經開始着手了,如果成功我也會寫博客,有興趣的同學可以留意一下。

 

目前瞭解到C++連接mysql的方法有三種,ado、直接使用mysql api還有就是connector c++

順便問一下路過的大神,不同的連接方式對數據庫的效率有影響嗎?請問哪一種效率最高?

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