轉載請注明出處,原文地址http://www.cnblogs.com/zenki-kong/p/4382657.html
剛開始寫博客,博主還只是個大三汪,學藝不精,如有錯誤還請前輩指出(>^ω^<),廢話不多說啦,進入正文
下一篇博客應該會講使用mysql connector c++來讓c++連接mysql,本篇是直接使用mysql api
首先交代一下開發環境,64位mysql5.6.23+VS2013+WIN7旗艦版
一開始用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位的數據庫,大概可以跳過這步。
有上角 活動解決方案平台 點新建
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++
順便問一下路過的大神,不同的連接方式對數據庫的效率有影響嗎?請問哪一種效率最高?