今天下午閑著沒事幹,組長讓我熟悉下C++連接資料庫,並對其進行操作,整個過程還算順利,為了記憶和下次使用,現把整個過程記錄下來: 1.安裝mysql 略 2.建立C++控制台程式,新建CPP源文件,如:sqlconn.cpp 3.在工程項目中屬性->c/C++->常規->附加包含目錄中添加mysql ...
今天下午閑著沒事幹,組長讓我熟悉下C++連接資料庫,並對其進行操作,整個過程還算順利,為了記憶和下次使用,現把整個過程記錄下來:
1.安裝mysql
略
2.建立C++控制台程式,新建CPP源文件,如:sqlconn.cpp
3.在工程項目中屬性->c/C++->常規->附加包含目錄中添加mysql安裝目錄中的MySQL\MySQL\MySQL Server 5.7\include
4.添加庫目錄
5.添加依賴項” libmysql.lib”
6.將運行平臺改為X64(這步很重要,不然編譯時會報錯 )
7.在源文件中加入頭文件:
#include <winsock.h> //註意順序,要放在mysql.h前
#include <mysql.h>//控制台項目中要在mysql.h之前include <winsock.h>
8.編寫自己的資料庫操作程式
示例:
void test1()
{
MYSQL *pConn;
pConn = mysql_init(NULL);
//第2、3、4、5參數的意思分別是:伺服器地址、用戶名、密碼、資料庫名,第6個為mysql埠號(0為預設值3306)
if(!mysql_real_connect(pConn,"localhost","root","root","test",0,NULL,0))
{
printf("無法連接資料庫:%s",mysql_error(pConn));
return;
}
mysql_query(pConn,"set names gbk");//防止亂碼。設置和資料庫的編碼一致就不會亂碼
//SET NAMES x 相當於 SET character_set_client = x;SET character_set_results = x;SET character_set_connection = x;
//寫set character set gbk;查詢不會亂碼,但是參數化插入會報錯。而set names gbk則都不會亂碼
//mysql_real_query比mysql_query多了個參數: 字元串query的長度, 所以適合有二進位數據的query, 而mysql_query的字元串query不能包含二進位,因為它以\0為結尾
//mysql_query() 不能傳二進位BLOB欄位,因為二進位信息中的\0會被誤判為語句結束。 mysql_real_query() 則可以。
if(mysql_query(pConn,"select * from persons"))
{
printf("查詢失敗:%s",mysql_error(pConn));
return;
}
//mysql_store_result是把查詢結果一次性取到客戶端的離線數據集,當結果比較大時耗記憶體。
//mysql_use_result則是查詢結果放在伺服器上,客戶端通過指針逐行讀取,節省客戶端記憶體。但是一個MYSQL*連接同時只能有一個未關閉的mysql_use_result查詢
MYSQL_RES *result = mysql_store_result(pConn);
MYSQL_ROW row;
while(row = mysql_fetch_row(result))
{
printf("%s %s\n",row[1],row[2]);
}
mysql_free_result(result);
mysql_close(pConn);
}
9.將mysq目錄….. \MySQL\MySQL Server 5.7\lib 下的libmysql.dll放到生成的exe目錄下,編譯執行即可。
參考:
1.http://www.cnblogs.com/rupeng/archive/2012/10/06/2712841.html
2.http://bbs.csdn.net/topics/390523114