首頁  >  文章  >  資料庫  >  C++怎麼連接mysql資料庫並讀取數據

C++怎麼連接mysql資料庫並讀取數據

WBOY
WBOY轉載
2023-06-03 09:05:364038瀏覽

    1、需要包含mysql API的頭檔

    如果需要連接都本機的mysql資料庫,前提是本機要已經安裝了mysql資料庫。這裡要用到一些mysql的API,像是連接資料庫、執行查詢語句等操作,這些介面都包含在下面的頭檔中:

    #include <mysql/mysql.h>

    2、連接mysql具體步驟

    這裡大致可以分為四個主要步驟:

    1、連接mysql資料庫

    1、連接mysql資料庫

    顯然,如果要取得mysql資料中數據,首先要連接資料庫,取得一個可以操作資料庫的句柄。

    2、執行查詢語句,也就是選擇我們需要的資料

    就是執行查詢語句,查詢我們需要的資料。查詢到的資料會保存在一個叫做結果集的地方。

    3、從結果集中取得所需的資料

    利用相關的介面函數,從結果集中取得每一行各地欄位的資料。

    4、從結果集中提取每行各個字段的信息

    5、釋放資源,包括結果集合mysql句柄

    下面具體講解一下幾個必須用到的關鍵介面函數。

    2.1 mysql_real_connect

    此函數用於連接執行在主機上的資料庫引擎,如果連線成功,將獲得可以操作資料庫的句柄,否則傳回NULL指標。

    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 long client_flag
    						)

    此函數參數眾多,各參數意義如下:

    • #mysql:是已有MYSQL結構的位址。在呼叫mysql_real_connect()之前,必須先呼叫mysql_init()來初始化MYSQL結構。

    • host:是主機名稱或IP位址。如果「host」是NULL或字串"localhost",連線將被視為與本機的連線。

    • user:使用者的MySQL登入ID。如果“user”是NULL或空字串"",使用者將被視為目前使用者。

    • passwd:使用者的密碼。如果「passwd」是NULL,只會對該使用者的(擁有1個空密碼欄位的)使用者表中的項目進行比對檢查。

    • db:是資料庫名稱。如果db為NULL,連線會將預設的資料庫設為該值。

    • port:如果「port」不是0,則其值將用作TCP/IP連接的連接埠號碼。注意,「host」參數決定了連線的類型。

    • unix_socket:如果unix_socket不是NULL,則字串描述了應使用的套接字或命名管道。注意,「host」參數決定了連線的類型。

    • client_flag:值通常為0

    2.2 mysql_query 或mysql_real_query

    該函數用於向資料庫傳送一條查詢指令,並讓資料庫執行。返回0表示查詢成功,否則失敗。

    int mysql_query(MYSQL *mysql, const char *stmt_str)

    或:

    int
    mysql_real_query(MYSQL *mysql,
                     const char *stmt_str,
                     unsigned long length)
    • mysql:為透過取得到的mysql操作句柄。

    • stmt_str:表示需要執行的查詢語句。

    • length:為查詢語句的長度。

    上面兩個函數的差別在於:

    • mysql_query() 不能用來執行帶二進位的語句,也就是參數stmt_str中不能有二進位數據,會被解析成字元。

    • mysql_query查速度稍慢一些,因為需要計算查詢語句的長度

    2.3 取得結果集mysql_store_result

    該函數傳回查詢成功的結果集,如果失敗則傳回NULL

    MYSQL_RES *mysql_store_result(MYSQL *mysql)

    2.4 顯示結果集中每行資料

    該函數的入參為步驟(3)中傳回的結果集。每次呼叫時,傳回結果集中的下一行數據,並將指標向後移動一行,如果沒有下一行數據,則傳回NULL。
    可以用mysql_num_fields(result)計算結果集中行的數量,mysql_num_fields(result)可以計算列的數量。假如row為某一行的信息,那麼row[0]、row[1]。 。 。依序該行的各個欄位資訊。

    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

    3、一個程式範例

    這裡的環境為linux系統。用到本地資料庫名稱為:CrashCourse,查詢的表格名稱為products,在下面的程式實例中,示範了查詢products表格中價錢大於30的所有項目。 products表格完整內容如下:

    C++怎麼連接mysql資料庫並讀取數據

    #include 
    #include <mysql/mysql.h>
    #include 
    using namespace std;
     
    MYSQL mysql;  //mysql连接
    MYSQL_RES* res; //结果集结构体   
    MYSQL_ROW row; //char** 二维数组,存放记录  
     
    int main()
    {	
    	// 步骤1: 初始化并连接数据库,获得操作数据库的句柄
    	mysql_init(&mysql);    //初始化
    	if (!(mysql_real_connect(&mysql, "localhost", "root", "root", "CrashCourse", 0, NULL, 0))) {
    		cout << "Couldn't connect to Database!\n : " << mysql_error(&mysql);
    		exit(1);
    	}
    	else {
    		printf("Database connection succeeded. Connected...\n\n");
    	}
    	// 步骤2: 执行查询语句,查询需要的数据(设置编码格式也相当于执行特殊的查询语句)
    	mysql_query(&mysql, "set names gbk"); // 设置编码格式
    	mysql_query(&mysql, "SELECT * from products where prod_price > 30");
     
    	// 步骤3:获取结果集
    	res = mysql_store_result(&mysql);
    	// 步骤4:显示结果集中每行数据
        int cols = mysql_num_fields(res); // 计算结果集中,列的个数
    	while (row = mysql_fetch_row(res)) {
        
        	for (int i = 0; i < cols; ++i) {
          		cout << row[i] << "\t";
        	}
        	cout << endl;
    	}
     	// 步骤5:释放结果集合mysql句柄
    	mysql_free_result(res);
    	mysql_close(&mysql);
     return 0;
     
    }

    查詢結果如下:

    C++怎麼連接mysql資料庫並讀取數據##

    以上是C++怎麼連接mysql資料庫並讀取數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除