目錄
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脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

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

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    C#與C:歷史,進化和未來前景 C#與C:歷史,進化和未來前景 Apr 19, 2025 am 12:07 AM

    C#和C 的歷史與演變各有特色,未來前景也不同。 1.C 由BjarneStroustrup在1983年發明,旨在將面向對象編程引入C語言,其演變歷程包括多次標準化,如C 11引入auto關鍵字和lambda表達式,C 20引入概念和協程,未來將專注於性能和系統級編程。 2.C#由微軟在2000年發布,結合C 和Java的優點,其演變注重簡潔性和生產力,如C#2.0引入泛型,C#5.0引入異步編程,未來將專注於開發者的生產力和雲計算。

    MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

    MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

    laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

    Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

    解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

    在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

    表演競賽:Golang vs.C 表演競賽:Golang vs.C Apr 16, 2025 am 12:07 AM

    Golang和C 在性能競賽中的表現各有優勢:1)Golang適合高並發和快速開發,2)C 提供更高性能和細粒度控制。選擇應基於項目需求和團隊技術棧。

    Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

    Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

    MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

    MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

    vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

    在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

    See all articles