目錄
1、需要包含mysql API的頭檔
2、連接mysql具體步驟
2.1 mysql_real_connect
2.2 mysql_query 或mysql_real_query
2.3 取得結果集mysql_store_result
2.4 顯示結果集中每行資料
3、一個程式範例
首頁 資料庫 mysql教程 C++怎麼連接mysql資料庫並讀取數據

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

Jun 03, 2023 am 09:05 AM
mysql c++

    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中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    2 週前 By 尊渡假赌尊渡假赌尊渡假赌
    倉庫:如何復興隊友
    4 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 Dec 09, 2024 am 11:42 AM

    如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤

    Golang 與 C++ 的異同 Golang 與 C++ 的異同 Jun 05, 2024 pm 06:12 PM

    Golang 與 C++ 的異同

    如何在C++中實現策略設計模式? 如何在C++中實現策略設計模式? Jun 06, 2024 pm 04:16 PM

    如何在C++中實現策略設計模式?

    C++ 智慧指標的底層實作原理有哪些? C++ 智慧指標的底層實作原理有哪些? Jun 05, 2024 pm 01:17 PM

    C++ 智慧指標的底層實作原理有哪些?

    如何在C++中實現巢狀異常處理? 如何在C++中實現巢狀異常處理? Jun 05, 2024 pm 09:15 PM

    如何在C++中實現巢狀異常處理?

    如何使用C++複製檔案? 如何使用C++複製檔案? Jun 05, 2024 pm 02:44 PM

    如何使用C++複製檔案?

    如何遍歷C++ STL容器? 如何遍歷C++ STL容器? Jun 05, 2024 pm 06:29 PM

    如何遍歷C++ STL容器?

    如何使用C++模板繼承? 如何使用C++模板繼承? Jun 06, 2024 am 10:33 AM

    如何使用C++模板繼承?

    See all articles