91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么連接mysql數據庫并讀取數據

發布時間:2023-05-06 16:16:58 來源:億速云 閱讀:147 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“C++怎么連接mysql數據庫并讀取數據”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++怎么連接mysql數據庫并讀取數據”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    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 <stdio.h>
    #include <mysql/mysql.h>
    #include <iostream>
    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數據庫并讀取數據”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    乐至县| 辛集市| 邵阳市| 昌平区| SHOW| 定结县| 博兴县| 招远市| 四川省| 井冈山市| 海兴县| 剑阁县| 土默特右旗| 连州市| 洛扎县| 奈曼旗| 夏津县| 昌邑市| 鲜城| 维西| 北京市| 二手房| 邢台市| 长海县| 逊克县| 兴城市| 东城区| 志丹县| 张家界市| 云龙县| 儋州市| 团风县| 丰城市| 福安市| 车险| 大渡口区| 定安县| 镶黄旗| 惠水县| 嘉定区| 犍为县|