標籤:壓縮 而不是 例子 溢出 gbk 指定 包括 建立項目 關閉
一、 建立項目並配置所需標頭檔及庫(一) 建立空項目
使用VS2015建立空項目
(二) 添加項目所需標頭檔所在檔案夾
右鍵項目選擇屬性,進入C/C++ => 常規 => 附加元件封裝含目錄,添加D:\mysql-5.7.19-win64\include(根據自己安裝的MySQL版本及地址填寫)
(三) 添加所需庫
仍在屬性頁面,進入連結器 => 常規 => 附加庫目錄,添加D:\mysql-5.7.19-winx64\lib(根據自己情況填寫)
(四) 添加libmysql.dll
在項目的.\x64\Debug\中添加libmysql.dll(從電腦的資源管理員中添加),該dll檔案在D:\mysql-5.7.19-winx64\lib目錄下
若為執行這步會出現以下錯誤:
二、 代碼測試(一) 添加項,將下列代碼複製運行即可
#include "stdio.h"#include "mysql.h"int main(){ MYSQL * con; //= mysql_init((MYSQL*) 0); MYSQL_RES *res; MYSQL_ROW row; char tmp[400]; //database configuartion char dbuser[30] = "root"; char dbpasswd[30] = "123456"; // it must be changed char dbip[30] = "localhost"; char dbname[50] = "hospital"; char tablename[50] = "bl"; char *query = NULL; int x; int y; int rt;//return value unsigned int t; int count = 0; con = mysql_init((MYSQL*)0); if (con != NULL && mysql_real_connect(con, dbip, dbuser, dbpasswd, dbname, 3306, NULL, 0)) { if (!mysql_select_db(con, dbname)) { printf("Select successfully the database!\n"); con->reconnect = 1; query = "set names \‘GBK\‘"; rt = mysql_real_query(con, query, strlen(query)); if (rt) { printf("Error making query: %s !!!\n", mysql_error(con)); } else { printf("query %s succeed!\n", query); } } } else { MessageBoxA(NULL, "Unable to connect the database,check your configuration!", "", NULL); } //sprintf(tmp, "insert into %s values(%s,%d,%d)", tablename, "null", x, y); //注意如何向具有自增欄位的資料庫中插入記錄 sprintf(tmp, "insert into bl values(null,‘x‘,‘x‘,‘x‘,‘x‘)"); rt = mysql_real_query(con, tmp, strlen(tmp)); if (rt) { printf("Error making query: %s !!!\n", mysql_error(con)); } else { printf("%s executed!!!\n", tmp); } sprintf(tmp, "select * from %s", tablename); rt = mysql_real_query(con, tmp, strlen(tmp)); if (rt) { printf("Error making query: %s !!!\n", mysql_error(con)); } else { printf("%s executed!!!\n", tmp); } res = mysql_store_result(con);//將結果儲存在res結構體中 while (row = mysql_fetch_row(res)) { for (t = 0; t<mysql_num_fields(res); t++) { printf("%s ", row[t]); } printf(".............\n"); count++; } printf("number of rows %d\n", count); printf("mysql_free_result...\n"); mysql_free_result(res); mysql_close(con); system("pause"); return 0;}(二) 串連Mysql和從MySql中取出資料的部分API介紹1. mysql_real_connect()1) 函數原型
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag)
2) 參數及說明
? 第一個參數應該是一個現存MYSQL結構的地址。在調用mysql_real_connect()之前,你必須調用mysql_init()初始化MYSQL結構。見下面的例子。
? host值可以是一個主機名稱或一個IP地址。如果host是NULL或字串"localhost",假定是到本地主機的一個串連。如果OS支援通訊端(Unix)或具名管道(Win32),使用他們而不是TCP/IP與伺服器串連。
? user參數包含使用者的MySQL登入ID。如果user是NULL,假定是目前使用者。在Unix下,它是當前登入名稱。在Windows ODBC下,必須明確地指定目前使用者名字。見16.4 怎樣填寫ODBC管理程式中各種域。
? passwd參數為user包含口令。如果passwd是NULL,只有在user表中對於有一個空白口令欄位的使用者的條目將被檢查一個匹配。這允許資料庫主管設定MySQL許可權,使使用者獲得不同的口令,取決於他們是否已經指定一個口令。注意:不要試圖在調用mysql_real_connect()前加密口令;口令加密自動被客戶API處理。
? db是資料庫名。如果db不是NULL,串連將預設資料庫設定為這個值。
? 如果port不是0,值對於TCP/IP串連將用作連接埠號碼。注意host參數決定串連的類型。
? 如果unix_socket不是NULL,字串指定通訊端或應該被使用的具名管道。注意host參數決定串連的類型。
? client_flag值通常是0,但是在很特殊的情況下可以被設定為下列標誌的組合:
標誌名字 意味著的標誌
CLIENT_FOUND_ROWS 返回找到的(匹配的)行數,不是受到影響的行數。
CLIENT_NO_SCHEMA 不允許db_name.tbl_name.col_name文法。這是為了ODBC;如果你使用該文法,導致文法分析器產生一個錯誤,它是為在一些ODBC程式捕捉錯誤是有用。
CLIENT_COMPRESS 使用壓縮協議。
CLIENT_ODBC 客戶是一個ODBC客戶。這使mysqld變得對ODBC更友好。
該函數用於串連資料庫
3) 傳回值
如果串連成功,一個 MYSQL*串連控制代碼。如果串連失敗,NULL。對一個成功的串連,傳回值與第一個參數值相同,除非你傳遞NULL給該參數。
4) 錯誤
CR_CONN_HOST_ERROR
不能串連MySQL伺服器。
CR_CONNECTION_ERROR
不能串連本地MySQL伺服器。
CR_IPSOCK_ERROR
不能建立一個IP通訊端。
CR_OUT_OF_MEMORY
記憶體溢出。
CR_SOCKET_CREATE_ERROR
不能建立一個Unix通訊端。
CR_UNKNOWN_HOST
不能找到主機名稱的IP地址。
CR_VERSION_ERROR
由於試圖使用一個不同協議版本的一個客戶庫與一個伺服器串連導致的一個協議失配。如果你使用一個非常老的客戶庫串連一個沒有使用--old-protocol選項啟動的新伺服器,這就能發生。
CR_NAMEDPIPEOPEN_ERROR;
不能在 Win32 上建立一個具名管道。
CR_NAMEDPIPEWAIT_ERROR;
不能在 Win32 上等待一個具名管道。
CR_NAMEDPIPESETSTATE_ERROR;
不能在 Win32 上得到一個管道處理器。
2. mysql_select_db()1) 函數原型
int mysql_select_db(MYSQL *mysql, const char *db)
2) 參數及說明
使得由db指定的資料庫成為 在由mysql指定的串連上的預設(當前)資料庫。在隨後的查詢中,這個資料庫對於不包括一個顯式的資料庫指定符的表的引用是預設資料庫。
除非串連的使用者能被認證允許使用資料庫,否則mysql_select_db()失敗。
3) 傳回值
成功,零。如果發生一個錯誤,非零。
4) 錯誤
CR_COMMANDS_OUT_OF_SYNC
命令以一個不適當的次序被執行。
CR_SERVER_GONE_ERROR
MySQL伺服器關閉了。
CR_SERVER_LOST
對伺服器的串連在查詢期間失去。
CR_UNKNOWN_ERROR
發生一個未知的錯誤。
3. mysql_real_query1) 函數原型
int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)
2) 參數及說明
執行由query指向的SQL查詢,它應該是一個length個位元組的字串。查詢必須由一個單個的SQL語句組成。你不應該在語句後增加一個終止的分號(“;”)或\g。
對於包含位元據的查詢,你必須使用mysql_real_query()而不是mysql_query(),因為二進位代碼資料可能包含“\0”字元,而且,mysql_real_query()比mysql_query()更快,因為它對查詢字串調用strlen()。
3) 傳回值
如果查詢成功,零。如果發生一個錯誤,非零。
4) 錯誤
CR_COMMANDS_OUT_OF_SYNC
命令以一個不適當的次序被執行。
CR_SERVER_GONE_ERROR
MySQL伺服器關閉了。
CR_SERVER_LOST
對伺服器的串連在查詢期間失去。
CR_UNKNOWN_ERROR
發生一個未知的錯誤。
4. mysql_store_result1) 函數原型
MYSQL_RES *mysql_store_result(MYSQL *mysql)
2) 參數及說明
用於將mysql_real_query查詢結果返回
3) 傳回值
返回MYSQL_RES結構,如果擷取失敗則返回空
5.
mysql_fetch_row()1) 函數原型
MYSQL_ROW *mysql_fetch_row(MYSQL_RES* res)
2) 參數及說明
用於讀取MYSQL_RES
3) 傳回值
返回表示MYSQL_RES的下一行的MYSQL_ROW
C++串連MySQL資料庫