【MySQL數據庫】C/C++連接數據庫

????????MySQL要想在C/C++下使用,就必須要有 MySQL 提供的頭文件和相關的庫。

????????在Ubuntu系統上,使用?apt install mysql-server?安裝MySQL服務器后,僅安裝了MySQL數據庫服務本身,并沒有安裝MySQL開發所需的庫和頭文件。因此,在嘗試用C/C++編寫訪問MySQL數據庫的應用程序時,編譯器找不到相應的MySQL頭文件(如)和相關的庫,導致無法正常編譯。

? ? ? ? 使用C/C++訪問數據庫時,需要安裝MySQL提供的開發包,這些包包含了進行MySQL開發所需的頭文件和庫文件。Ubuntu系統下安裝的MySQL服務,可以使用以下指令安裝MySQL開發庫。

sudo apt install default-libmysqlclient-dev

? ? ? ? 注意:MySQL開發庫的版本要與MySQL服務器一致,否則某些情況下會出現不兼容問題。??

? ? ? ? 在Ubuntu系統下安裝好MySQL后,頭文件在?/usr/include/mysql 路徑下(/usr/include是系統搜索頭文件的默認路徑),庫文件在?/usr/lib/x86_64-linux-gnu/ 路徑下(系統鏈接庫時默認的查找路徑)。

? ? ? ? 下面通過 mysql_get_client_info() 函數,來驗證我們的引入是否成功。

#include <cstdio>

#include <mysql/mysql.h>

int main()

{

? ? printf("mysql client Version: %s\n", mysql_get_client_info());

? ? return 0;

}

// 下面指令生成失敗,因為沒有鏈接MySQL庫

zhu@iv-ydi2mepybkcva4ghjhmx:~/mysql$ g++ test.cc -o test??

// 鏈接MySQL庫,成功生成

zhu@iv-ydi2mepybkcva4ghjhmx:~/mysql$ g++ test.cc -o test -lmysqlclient??

? ? ? ? C/C++對應MySQL的接口和使用流程請觀看此文章:MySQL操作函數接口。

MySQL通用接口:

????????初始化一個MYSQL連接的實例對象。

????????MYSQL * mysql_init(MYSQL *mysql);? ??

????????連接MySQL服務器。

????????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 服務器發送 SQL 語句并執行它。

????????int mysql_query(MYSQL *mysql, const char *stmt_str);

獲取MySQL結果:

????????mysql_store_result是從 MySQL 服務器獲取查詢結果集的一個函數。當執行了一個select?查詢或其他會產生結果集的查詢(如show)后,可以使用該函數來將整個結果集一次性加載到客戶端內存中。

??????MYSQL_RES *mysql_store_result(MYSQL *mysql);

??????mysql_store_result 獲取結果集后,下面就是讀取獲取結果集中的數據。

? ? ? 獲取結果行數:my_ulonglong mysql_num_rows(MYSQL_RES *res);

??????獲取結果列數:unsigned int mysql_num_fields(MYSQL_RES *res);

??????獲取結果集中每個列的屬性信息

??????????????MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

??????獲取結果集中的數據:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

? ? ?

??????說明:my_ulonglong其實就是int64_t;

? ? ? ? ? ???????MYSQL_FIELD是一個結構體,mysql_fetch_fields實際返回的就是結構體數? ? ? ? ? ? 組,數組的每個元素對應一個列的屬性信息;

? ? ? ? ? ? ????MYSQL_ROW其實就是char**,可以當成一個二維數組來用,每一列對應數組中? ? ? ? 的一個元素

注意:

???? ? ?1,建立好鏈接之后,獲取英文沒有問題,如果獲取中文是亂碼,那么說明設置鏈接的字符集與數據庫不匹配。這里需要運用 mysql_set_character_set 修改字符集。

????????mysql_set_character_set(myfd, "utf8");? ? myfd使用utf8字符集,原始默認是latin1

? ? ? ? 2,mysql_store_result函數存儲結果集時,內部malloc了一片內存空間來存儲查詢過來的數據,執行完畢后,需要 void mysql_free_result(MYSQL_RES *result) 函數來釋放資源。

? ? ? ? 代碼實例請在此鏈接下觀看:C++代碼運用MySQL


? ? ? ? 下面來說明下?show processlist?命令。

????????show processlist?是 MySQL 中用于顯示當前所有連接到 MySQL 服務器的連接(即線程)以及其狀態的命令。每個連接在 MySQL 中都表示為一個線程。該指令提供了查看這些線程詳細信息的方法。輸出字段說明如下:

  • Id:每個線程的唯一標識符。
  • User:發起該線程的用戶名。
  • Host:發起該線程的客戶端主機名或IP地址(以及端口號)。如果通過TCP/IP連接,格式通常是:[hostname]:[port];如果是本地連接,則可能是localhost
  • db:當前線程正在使用的數據庫名稱。如果沒有選擇任何數據庫,則此列為NULL。
  • Command:線程正在執行的操作類型。例如,sleep表示線程處于空閑等待狀態;query表示線程正在執行查詢。
  • Time:線程處于其當前狀態的時間,以秒為單位。
  • State:線程的狀態,提供了關于線程當前活動的更詳細的信息。不同的命令可能有不同的狀態。
  • Info:正在執行的SQL語句文本。如果線程沒有執行任何語句,則此列為NULL。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80397.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kubernetes調度策略深度解析:NodeSelector與NodeAffinity的正確打開方式

在Kubernetes集群管理中&#xff0c;如何精準控制Pod的落點&#xff1f;本文將深入解析兩大核心調度策略的差異&#xff0c;并通過生產案例教你做出正確選擇。 一、基礎概念快速理解 1.1 NodeSelector&#xff08;節點選擇器&#xff09; 核心機制&#xff1a;通過標簽硬匹配…

Golang的linux運行環境的安裝與配置

很多新手在學go時&#xff0c;linux下的配置環境一頭霧水&#xff0c;總結下&#xff0c;可供參考&#xff01; --------------------------------------Golang的運行環境的安裝與配置-------------------------------------- 將壓縮包放在/home/tools/下 解壓 tar -zxvf g…

自定義實現elementui的錨點

背景 前不久有個需求&#xff0c;上半部分是el-step步驟條&#xff0c;下半部分是一些文字說明&#xff0c;需要實現點擊步驟條中某個步驟自定義定位到對應部分的文字說明&#xff0c;同時滾動內容區域的時候還要自動選中對應區域的步驟。element-ui-plus的有錨點這個組件&…

Oracle Fusion常用表

模塊表名表描述字段說明sodoo_headers_all銷售訂單頭表sodoo_lines_all銷售訂單行表sodoo_fulfill_lines_all銷售訂單明細行表popo_headers_all采購訂單頭表popo_lines_all采購訂單行表popo_line_locations_all采購訂單分配表popo_distributions_all采購訂單發運表invEGP_SYSTE…

面試常問系列(一)-神經網絡參數初始化-之-softmax

背景 本文內容還是對之前關于面試題transformer的一個延伸&#xff0c;詳細講解一下softmax 面試常問系列(二)-神經網絡參數初始化之自注意力機制-CSDN博客 Softmax函數的梯度特性與輸入值的幅度密切相關&#xff0c;這是Transformer中自注意力機制需要縮放點積結果的關鍵原…

5.9-selcct_poll_epoll 和 reactor 的模擬實現

5.9-select_poll_epoll 本文演示 select 等 io 多路復用函數的應用方法&#xff0c;函數具體介紹可以參考我過去寫的博客。 先綁定監聽的文件描述符 int sockfd socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serveraddr; memset(&serveraddr, 0, sizeof(struc…

Python基礎語法(上)

常量和表達式 我們可以使用python來進行一些 - * / %的一些運算 print(1 2 - 3) print(1 2 * 3) print(1 2 / 3) python中的運算規則與數學當中一致&#xff0c;先乘除后加減&#xff0c;有括號的先計算括號里面的。 形如 1 2 - 3 這樣是算式, 在編程語言中稱為 表達式,…

數圖閃耀2025深圳CCFA中國零售博覽會:AI+零售數字化解決方案引發現場熱潮

展會時間&#xff1a;2025年5月8日—10日 地點&#xff1a;深圳國際會展中心&#xff08;寶安新館&#xff09; 【深圳訊】5月8日&#xff0c;亞洲規模最大的零售行業盛會——2025 CCFA中國零售博覽會在深圳盛大開幕。本屆展會匯聚全球25個國家和地區的900余家參展商&#xff…

方法:批量識別圖片區域文字并重命名,批量識別指定區域內容改名,基于QT和阿里云的實現方案,詳細方法

基于QT和阿里云的圖片區域文字識別與批量重命名方案 項目場景 ??企業檔案管理??:批量處理掃描合同、發票等文檔,根據編號或關鍵信息自動重命名文件??醫療影像管理??:識別X光、CT等醫學影像中的患者信息,按姓名+檢查日期重命名??電商訂單處理??:從訂單截圖中提…

Mybatis解決以某個字段存在,批量更新,不存在批量插入(高效)(一)

背景 在開發企業級應用時&#xff0c;我們經常需要處理批量數據的插入和更新操作。傳統的逐條處理方式性能低下&#xff0c;而簡單的REPLACE INTO或INSERT ... ON DUPLICATE KEY UPDATE在某些場景下又不夠靈活。本文將介紹一種基于臨時表的高效批量插入/更新方案&#xff0c;解…

JVM、JRE、JDK的區別

JVM JVM全稱Java虛擬機(Java Virtual Machine, JVM),它是運行java字節碼的虛擬機&#xff0c;JVM針對不同的系統有不同的實現&#xff0c;目的運行相同的字節碼有同樣的結果&#xff0c;JVM是“一次編譯&#xff0c;到處運行”實現的關鍵。如下不同的編程語言編譯生成字節碼文…

神經元和神經網絡定義

在深度學習中&#xff0c;神經元和神經網絡是構成神經網絡模型的基本元素。讓我們從基礎開始&#xff0c;逐步解釋它們的含義和作用。 1?? 神經元是什么&#xff1f; 神經元是神經網絡中的基本計算單元&#xff0c;靈感來自于生物神經系統中的神經元。每個人的腦中有數以億…

CDGP重點知識梳理

寫在前面 全文11700字,共82個重點知識 目 錄 考點分布 考試要求 第一章 數據管理-5%

Ubuntu 22.04 安裝配置遠程桌面環境指南

在云服務器或遠程主機上安裝圖形化桌面環境,可以極大地提升管理效率和用戶體驗。本文將詳細介紹如何在 Ubuntu 22.04 (Jammy Jellyfish) 系統上安裝和配置 Xfce4 桌面環境,并通過 VNC 實現遠程訪問。 系統環境 操作系統:Ubuntu 22.04 LTS (Jammy Jellyfish)架構:AMD64安裝…

node提示node:events:495 throw er解決方法

前言 之前開發的時候喜歡使用高版本&#xff0c;追求新的東西&#xff0c;然后回頭運行一下之前的項目提示如下 項目技術棧&#xff1a;node egg 報錯 node:events:495 throw er; // Unhandled error event ^ Error: ENOENT: no such file or directory, scandir F:\my\gi…

【軟件設計師:軟件工程】9.軟件開發模型與方法

一、軟件危機與軟件工程 軟件危機與軟件工程是計算機科學發展中密切相關的兩個概念。 1.軟件危機(Software Crisis) 背景:20世紀60年代至80年代,隨著計算機硬件性能提升,軟件規模與復雜度劇增,傳統開發方法難以應對,導致大量項目失敗。 表現: 成本失控:開發周期長、…

范式之殤-關系代數與參照完整性在 Web 后臺的落寞

最近參加了一個PostgreSQL相關的茶會&#xff0c;感慨良多。原本話題是PostgreSQL 在 SELECT 場景中憑借其成熟的查詢優化器、豐富的功能特性和靈活的執行策略&#xff0c;展現出顯著優勢。在窗口函數&#xff08;Window Functions&#xff09;、JOIN 優化、公共表表達式&#…

WebRTC工作原理詳細介紹、WebRTC信令交互過程和WebRTC流媒體傳輸協議介紹

簡介 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一項允許在網頁瀏覽器之間進行音視頻通信的技術&#xff0c;基本不需要安裝額外的插件。它的核心特點是支持低延遲的點對點&#xff08;P2P&#xff09;通訊&#xff0c;常用于視頻聊天、實時文件共享、多人…

【大語言模型ChatGPT4/4o 】“AI大模型+”多技術融合:賦能自然科學暨ChatGPT在地學、GIS、氣象、農業、生態與環境領域中的應用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千問為代表AI大語言模型帶來了新一波人工智能浪潮&#xff0c;可以面向科研選題、思維導圖、數據清洗、統計分析、高級編程、代碼調試、算法學習、論文檢索、寫作、翻譯、潤色、文獻輔助…

提升編程效率的利器:Zed高性能多人協作代碼編輯器

在當今這個快節奏的開發環境中&#xff0c;一個高效、靈活的代碼編輯器無疑對開發者們起著至關重要的支持作用。Zed&#xff0c;作為來自知名編輯器Atom和語法解析器Tree-sitter的創造者的心血之作&#xff0c;正是這樣一款高性能支持多人合作的編輯神器。本文將帶領大家深入探…