欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年04月21日 09:41:11   作者:編程磚家  
在實(shí)際開發(fā)中我們經(jīng)常需要對數(shù)據(jù)庫進(jìn)行訪問,針對不同類型的數(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ì)對該用戶的(擁有1個(gè)空密碼字段的)用戶表中的條目進(jìn)行匹配檢查。
  • db:是數(shù)據(jù)庫名稱。如果db為NULL,連接會(huì)將默認(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:為查詢語句的長度。

上面兩個(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 全面解析C++中的析構(gòu)函數(shù)

    全面解析C++中的析構(gòu)函數(shù)

    這篇文章主要介紹了C++中的析構(gòu)函數(shù),為C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • C++ 數(shù)據(jù)結(jié)構(gòu)完全二叉樹的判斷

    C++ 數(shù)據(jù)結(jié)構(gòu)完全二叉樹的判斷

    這篇文章主要介紹了C++ 數(shù)據(jù)結(jié)構(gòu)完全二叉樹的判斷的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • strcpy函數(shù)實(shí)現(xiàn)簡示例命分享

    strcpy函數(shù)實(shí)現(xiàn)簡示例命分享

    這篇文章主要介紹了strcpy函數(shù)實(shí)現(xiàn)簡示例命,需要的朋友可以參考下
    2014-03-03
  • 減少OpenCV讀取高分辨率圖像的時(shí)間示例

    減少OpenCV讀取高分辨率圖像的時(shí)間示例

    今天小編就為大家分享一篇減少OpenCV讀取高分辨率圖像的時(shí)間示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++?Qt開發(fā)之關(guān)聯(lián)容器類使用方法詳解

    C++?Qt開發(fā)之關(guān)聯(lián)容器類使用方法詳解

    當(dāng)我們談?wù)摼幊讨械臄?shù)據(jù)結(jié)構(gòu)時(shí),順序容器是不可忽視的一個(gè)重要概念,Qt?中提供了豐富的容器類,用于方便地管理和操作數(shù)據(jù),本章我們將主要學(xué)習(xí)關(guān)聯(lián)容器,主要包括?QMap?,QSet和?QHash,感興趣的朋友跟著小編一起來學(xué)習(xí)吧
    2023-12-12
  • C/C++產(chǎn)生隨機(jī)數(shù)函數(shù)簡單介紹

    C/C++產(chǎn)生隨機(jī)數(shù)函數(shù)簡單介紹

    這篇文章主要為大家詳細(xì)介紹了C/C++產(chǎn)生隨機(jī)數(shù)函數(shù)的實(shí)現(xiàn)方法,如何使用C/C++產(chǎn)生隨機(jī)數(shù)函數(shù),感興趣的小伙伴們可以參考一下
    2016-04-04
  • 淺談C語言轉(zhuǎn)義字符和格式控制符

    淺談C語言轉(zhuǎn)義字符和格式控制符

    下面小編就為大家?guī)硪黄獪\談C語言轉(zhuǎn)義字符和格式控制符。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • VS報(bào)錯(cuò)C6011的問題:取消對NULL指針的引用(解決方法)

    VS報(bào)錯(cuò)C6011的問題:取消對NULL指針的引用(解決方法)

    這篇文章主要介紹了VS報(bào)錯(cuò)C6011的問題:取消對NULL指針的引用(解決方法),C6011:取消對NULL指針的引用,發(fā)現(xiàn)是沒有進(jìn)行空指針的判斷,解決方案跟隨小編一起看看吧
    2024-01-01
  • C++超詳細(xì)講解智能指針

    C++超詳細(xì)講解智能指針

    為了解決內(nèi)存泄漏的問題,C++中提出了智能指針。內(nèi)存泄漏的產(chǎn)生原因有很多,即使我們正確的使用malloc和free關(guān)鍵字也有可能產(chǎn)生內(nèi)存泄漏,如在malloc和free之間如果存在拋異常,那也會(huì)產(chǎn)生內(nèi)存泄漏。這種問題被稱為異常安全
    2022-06-06
  • C語言指針詳解

    C語言指針詳解

    這篇文章非常詳細(xì)的講解了C語言中指針的概念,包含多種方法,多種定義,全面的說明了C語言的特性
    2021-06-06

最新評論