您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C++怎么連接mysql數據庫并讀取數據”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++怎么連接mysql數據庫并讀取數據”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
如果需要連接都本地的mysql數據庫,前提是本地要已經安裝了mysql數據庫。這里要用到一些mysql的API,比如連接數據庫、執行查詢語句等操作,這些接口都包含在下面的頭文件中:
#include <mysql/mysql.h>
這里大致可以分為四個主要步驟:
1、連接mysql數據庫
1、連接mysql數據庫
顯然,如果要獲取mysql數據中數據,首先要連接數據庫,獲得一個可以操作數據庫的句柄。
2、執行查詢語句,即選擇我們需要的數據
就是執行查詢語句,查詢我們需要的數據。查詢到的數據會保存在一個叫做結果集的地方。
3、從結果集中獲取需要的數據
利用相關的接口函數,從結果集中獲取每一行各地字段的數據。
4、從結果集中提取每行各個字段的信息
5、釋放資源,包括結果集合mysql句柄
下面具體講解一下幾個必須用到的關鍵接口函數。
該函數用于連接運行在主機上的數據庫引擎,如果連接成功,將獲得可以操作數據庫的句柄,否則返回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
該函數用于向數據庫發送一條查詢命令,并讓數據庫執行。返回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查速度稍慢一些,因為需要計算查詢語句的長度
該函數返回查詢成功的結果集,如果失敗則返回NULL
MYSQL_RES *mysql_store_result(MYSQL *mysql)
該函數的入參為步驟(3)中返回的結果集。每次調用時,返回結果集中的下一行數據,并將指針向后移動一行,如果沒有下一行數據,返回NULL。
可以用mysql_num_fields(result)計算結果集中行的數量,mysql_num_fields(result)可以計算列的數量。假如row為某一行的信息,那么row[0]、row[1]。。。依次該行的各個字段信息。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
這里的環境為linux系統。用到本地數據庫名稱為:CrashCourse,查詢的表名稱為products,下面的編程實例中,演示了查詢products表中價錢大于30的所有項目。products表格完整內容如下:
#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數據庫并讀取數據”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。