C++串連MySQL資料庫

來源:互聯網
上載者:User

標籤:壓縮   而不是   例子   溢出   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資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.