最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++連接mysql數(shù)據(jù)庫并讀取數(shù)據(jù)的具體步驟

 更新時間:2023年04月21日 09:41:11   作者:編程磚家  
在實際開發(fā)中我們經(jīng)常需要對數(shù)據(jù)庫進行訪問,針對不同類型的數(shù)據(jù)庫(如MySQL、sqLite、Access、Excel等),如果采用不同的方法進行連接,會把我們搞崩潰,下面這篇文章主要給大家介紹了關(guān)于C++連接mysql數(shù)據(jù)庫并讀取數(shù)據(jù)的具體步驟,需要的朋友可以參考下

1、需要包含mysql API的頭文件

如果需要連接都本地的mysql數(shù)據(jù)庫,前提是本地要已經(jīng)安裝了mysql數(shù)據(jù)庫。這里要用到一些mysql的API,比如連接數(shù)據(jù)庫、執(zhí)行查詢語句等操作,這些接口都包含在下面的頭文件中:

#include <mysql/mysql.h>

2、連接mysql具體步驟

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

1、連接mysql數(shù)據(jù)庫

1、連接mysql數(shù)據(jù)庫

顯然,如果要獲取mysql數(shù)據(jù)中數(shù)據(jù),首先要連接數(shù)據(jù)庫,獲得一個可以操作數(shù)據(jù)庫的句柄。

2、執(zhí)行查詢語句,即選擇我們需要的數(shù)據(jù)

就是執(zhí)行查詢語句,查詢我們需要的數(shù)據(jù)。查詢到的數(shù)據(jù)會保存在一個叫做結(jié)果集的地方。

3、從結(jié)果集中獲取需要的數(shù)據(jù)

利用相關(guān)的接口函數(shù),從結(jié)果集中獲取每一行各地字段的數(shù)據(jù)。

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

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

下面具體講解一下幾個必須用到的關(guān)鍵接口函數(shù)。

2.1 mysql_real_connect

該函數(shù)用于連接運行在主機上的數(shù)據(jù)庫引擎,如果連接成功,將獲得可以操作數(shù)據(jù)庫的句柄,否則返回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
						)

該函數(shù)參數(shù)眾多,各個參數(shù)含義如下:

  • mysql:是已有MYSQL結(jié)構(gòu)的地址。調(diào)用mysql_real_connect()之前,必須調(diào)用mysql_init()來初始化MYSQL結(jié)構(gòu)。
  • host:是主機名或IP地址。如果“host”是NULL或字符串"localhost",連接將被視為與本地主機的連接。
  • user:用戶的MySQL登錄ID。如果“user”是NULL或空字符串"",用戶將被視為當(dāng)前用戶。
  • passwd:用戶的密碼。如果“passwd”是NULL,僅會對該用戶的(擁有1個空密碼字段的)用戶表中的條目進行匹配檢查。
  • db:是數(shù)據(jù)庫名稱。如果db為NULL,連接會將默認(rèn)的數(shù)據(jù)庫設(shè)為該值。
  • port:如果“port”不是0,其值將用作TCP/IP連接的端口號。注意,“host”參數(shù)決定了連接的類型。
  • unix_socket:如果unix_socket不是NULL,該字符串描述了應(yīng)使用的套接字或命名管道。注意,“host”參數(shù)決定了連接的類型。
  • client_flag:值通常為0

2.2 mysql_query 或 mysql_real_query

該函數(shù)用于向數(shù)據(jù)庫發(fā)送一條查詢命令,并讓數(shù)據(jù)庫執(zhí)行。返回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:表示需要執(zhí)行的查詢語句。
  • length:為查詢語句的長度。

上面兩個函數(shù)的區(qū)別在于:

  • mysql_query() 不能用于執(zhí)行帶二進制的語句,也就是參數(shù)stmt_str中不能有二進制數(shù)據(jù),會被解析成字符。
  • mysql_query查速度稍慢一些,因為需要計算查詢語句的長度

2.3 獲取結(jié)果集mysql_store_result

該函數(shù)返回查詢成功的結(jié)果集,如果失敗則返回NULL

MYSQL_RES *mysql_store_result(MYSQL *mysql)

2.4 顯示結(jié)果集中每行數(shù)據(jù)

該函數(shù)的入?yún)椴襟E(3)中返回的結(jié)果集。每次調(diào)用時,返回結(jié)果集中的下一行數(shù)據(jù),并將指針向后移動一行,如果沒有下一行數(shù)據(jù),返回NULL。
可以用mysql_num_fields(result)計算結(jié)果集中行的數(shù)量,mysql_num_fields(result)可以計算列的數(shù)量。假如row為某一行的信息,那么row[0]、row[1]。。。依次該行的各個字段信息。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

3、一個編程示例

這里的環(huán)境為linux系統(tǒng)。用到本地數(shù)據(jù)庫名稱為:CrashCourse,查詢的表名稱為products,下面的編程實例中,演示了查詢products表中價錢大于30的所有項目。products表格完整內(nèi)容如下:

#include <stdio.h>
#include <mysql/mysql.h>
#include <iostream>
using namespace std;
 
MYSQL mysql;  //mysql連接
MYSQL_RES* res; //結(jié)果集結(jié)構(gòu)體   
MYSQL_ROW row; //char** 二維數(shù)組,存放記錄  
 
int main()
{	
	// 步驟1: 初始化并連接數(shù)據(jù)庫,獲得操作數(shù)據(jù)庫的句柄
	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: 執(zhí)行查詢語句,查詢需要的數(shù)據(jù)(設(shè)置編碼格式也相當(dāng)于執(zhí)行特殊的查詢語句)
	mysql_query(&mysql, "set names gbk"); // 設(shè)置編碼格式
	mysql_query(&mysql, "SELECT * from products where prod_price > 30");
 
	// 步驟3:獲取結(jié)果集
	res = mysql_store_result(&mysql);
	// 步驟4:顯示結(jié)果集中每行數(shù)據(jù)
    int cols = mysql_num_fields(res); // 計算結(jié)果集中,列的個數(shù)
	while (row = mysql_fetch_row(res)) {
    
    	for (int i = 0; i < cols; ++i) {
      		cout << row[i] << "\t";
    	}
    	cout << endl;
	}
 	// 步驟5:釋放結(jié)果集合mysql句柄
	mysql_free_result(res);
	mysql_close(&mysql);
 return 0;
 
}

查詢結(jié)果如下:

總結(jié)

到此這篇關(guān)于C++連接mysql數(shù)據(jù)庫并讀取數(shù)據(jù)的文章就介紹到這了,更多相關(guān)C++連接mysql并讀取數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • cmake 學(xué)習(xí)筆記

    cmake 學(xué)習(xí)筆記

    這篇文章主要介紹了作者學(xué)習(xí)cmake 的相關(guān)資料與心得,有需要的小伙伴可以參考下
    2017-07-07
  • C語言魔塔游戲的實現(xiàn)代碼

    C語言魔塔游戲的實現(xiàn)代碼

    這篇文章主要介紹了C語言魔塔游戲的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言實現(xiàn)影院售票管理系統(tǒng)

    C語言實現(xiàn)影院售票管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)影院售票管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++入門之list的使用詳解

    C++入門之list的使用詳解

    這篇文章主要為大家介紹了C++入門之list的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • C++開發(fā)中四大常見問題與解決方案匯總

    C++開發(fā)中四大常見問題與解決方案匯總

    C++作為高性能、跨平臺的編譯型編程語言,廣泛應(yīng)用于后端服務(wù)、嵌入式、游戲開發(fā)、系統(tǒng)底層等領(lǐng)域,本文梳理開發(fā)中高頻出現(xiàn)的典型問題,結(jié)合代碼演示講解原因與解決方案,幫助開發(fā)者規(guī)避踩坑
    2026-06-06
  • Qt中讀取csv文件的三種主要方法

    Qt中讀取csv文件的三種主要方法

    本文介紹了在Qt中讀取CSV文件的三種主要方法:基礎(chǔ)方法(QFile+QTextStream)、模型法(QStandardItemModel)和數(shù)據(jù)庫法(QSqlDatabase),基礎(chǔ)方法適合直接處理數(shù)據(jù),模型法便于界面展示,數(shù)據(jù)庫法則適用于復(fù)雜查詢,文章提供了詳細(xì)的代碼示例,需要的朋友可以參考下
    2026-01-01
  • C++實現(xiàn)酒店管理系統(tǒng)

    C++實現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Clion配置C語言環(huán)境的步驟詳解

    Clion配置C語言環(huán)境的步驟詳解

    這篇文章主要介紹了Clion配置C語言環(huán)境的步驟詳解,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 在matlab中實現(xiàn)for循環(huán)的方法

    在matlab中實現(xiàn)for循環(huán)的方法

    for循環(huán)用來循環(huán)處理數(shù)據(jù),break用于終止離它最近的一層for循環(huán),continue用于跳過離它最近的一層for循環(huán),接著執(zhí)行下一次循環(huán),本文重點給大家介紹在matlab中實現(xiàn)for循環(huán)的方法,感興趣的朋友一起看看吧
    2021-11-11
  • C語言鏈表詳解及代碼分析

    C語言鏈表詳解及代碼分析

    這篇文章主要介紹了C語言鏈表詳解及代碼分析,說明了鏈表的定義與概念,通過詳細(xì)的代碼展示了基于鏈表的增刪改查功能,希望本文能對你有所幫助
    2021-06-06

最新評論

白城市| 秦安县| 衡山县| 正定县| 卫辉市| 沅江市| 青冈县| 宣武区| 蒙阴县| 新和县| 苏州市| 盐池县| 德保县| 青河县| 乐昌市| 金塔县| 郎溪县| 苏尼特左旗| 古丈县| 如皋市| 金溪县| 陇南市| 扎赉特旗| 临高县| 稻城县| 满城县| 姜堰市| 卓尼县| 喀喇沁旗| 康平县| 肥城市| 手游| 甘洛县| 怀安县| 保德县| 胶州市| 开封县| 宜阳县| 庐江县| 廉江市| 巩义市|