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

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

 更新時(shí)間:2023年04月21日 09:41:11   作者:編程磚家  
在實(shí)際開發(fā)中我們經(jīng)常需要對(duì)數(shù)據(jù)庫進(jìn)行訪問,針對(duì)不同類型的數(shù)據(jù)庫(如MySQL、sqLite、Access、Excel等),如果采用不同的方法進(jìn)行連接,會(huì)把我們搞崩潰,下面這篇文章主要給大家介紹了關(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具體步驟

這里大致可以分為四個(gè)主要步驟:

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

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

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

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

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

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

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

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

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

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

2.1 mysql_real_connect

該函數(shù)用于連接運(yùn)行在主機(jī)上的數(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ù)眾多,各個(gè)參數(shù)含義如下:

  • mysql:是已有MYSQL結(jié)構(gòu)的地址。調(diào)用mysql_real_connect()之前,必須調(diào)用mysql_init()來初始化MYSQL結(jié)構(gòu)。
  • host:是主機(jī)名或IP地址。如果“host”是NULL或字符串"localhost",連接將被視為與本地主機(jī)的連接。
  • user:用戶的MySQL登錄ID。如果“user”是NULL或空字符串"",用戶將被視為當(dāng)前用戶。
  • passwd:用戶的密碼。如果“passwd”是NULL,僅會(huì)對(duì)該用戶的(擁有1個(gè)空密碼字段的)用戶表中的條目進(jìn)行匹配檢查。
  • db:是數(shù)據(jù)庫名稱。如果db為NULL,連接會(huì)將默認(rèn)的數(shù)據(jù)庫設(shè)為該值。
  • port:如果“port”不是0,其值將用作TCP/IP連接的端口號(hào)。注意,“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:為查詢語句的長度。

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

  • mysql_query() 不能用于執(zhí)行帶二進(jìn)制的語句,也就是參數(shù)stmt_str中不能有二進(jìn)制數(shù)據(jù),會(huì)被解析成字符。
  • mysql_query查速度稍慢一些,因?yàn)樾枰?jì)算查詢語句的長度

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)用時(shí),返回結(jié)果集中的下一行數(shù)據(jù),并將指針向后移動(dòng)一行,如果沒有下一行數(shù)據(jù),返回NULL。
可以用mysql_num_fields(result)計(jì)算結(jié)果集中行的數(shù)量,mysql_num_fields(result)可以計(jì)算列的數(shù)量。假如row為某一行的信息,那么row[0]、row[1]。。。依次該行的各個(gè)字段信息。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

3、一個(gè)編程示例

這里的環(huán)境為linux系統(tǒng)。用到本地?cái)?shù)據(jù)庫名稱為:CrashCourse,查詢的表名稱為products,下面的編程實(shí)例中,演示了查詢products表中價(jià)錢大于30的所有項(xiàng)目。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); // 計(jì)算結(jié)果集中,列的個(gè)數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    C++作為高性能、跨平臺(tái)的編譯型編程語言,廣泛應(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++實(shí)現(xiàn)酒店管理系統(tǒng)

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

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

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

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

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

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

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

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

最新評(píng)論

余庆县| 旬阳县| 红河县| 松溪县| 商丘市| 微山县| 怀仁县| 外汇| 宜兰市| 鄯善县| 呼图壁县| 抚宁县| 改则县| 鹤峰县| 肇东市| 柯坪县| 根河市| 壤塘县| 双鸭山市| 都安| 项城市| 松桃| 于田县| 通城县| 白山市| 嵩明县| 黄山市| 罗定市| 静宁县| 上饶市| 札达县| 汽车| 兴和县| 大名县| 尚志市| 鹤山市| 渭南市| 固原市| 新蔡县| 洞口县| 宣恩县|