CC++鏈接數據庫(MySQL)超級詳細指南

C/C++鏈接數據庫(MySQL)超級詳細指南

在C/C++編程中,與數據庫進行交互是一項常見的任務。MySQL作為一個廣泛使用的開源關系型數據庫管理系統,提供了豐富的API供C/C++開發者使用。本文將詳細介紹如何在C/C++程序中鏈接MySQL數據庫,包括環境配置、庫文件引入、連接數據庫、執行SQL語句、處理查詢結果等關鍵步驟。

一、環境配置

在使用C/C++鏈接MySQL數據庫之前,需要確保你的開發環境中已經安裝了MySQL數據庫以及相應的開發庫。

  1. 安裝MySQL

    前往MySQL官網,根據你的操作系統下載并安裝MySQL服務器。安裝過程中,請確保選擇包含開發庫(如MySQL Connector/C)的選項。

  2. 配置開發環境

    • Windows
      在Windows上,安裝MySQL后,開發庫通常位于MySQL安裝目錄下的libinclude文件夾中。你需要在你的C/C++項目中配置這些路徑,以便編譯器和鏈接器能夠找到MySQL的頭文件和庫文件。

    • Linux
      在Linux上,你可以通過包管理器(如apt-get、yum等)安裝MySQL開發庫。例如,在Ubuntu上,你可以使用以下命令安裝:

      sudo apt-get install libmysqlclient-dev
      

      安裝后,頭文件通常位于/usr/include/mysql,庫文件位于/usr/lib/x86_64-linux-gnu/(路徑可能因系統和MySQL版本而異)。

二、庫文件引入

在你的C/C++項目中,你需要引入MySQL的頭文件,并在編譯時鏈接MySQL的庫文件。

  1. 包含頭文件

    在你的C/C++源文件中,包含MySQL的頭文件:

    #include <mysql.h>
    
  2. 配置項目

    • Visual Studio
      在Visual Studio中,你需要通過項目屬性配置包含目錄和庫目錄,以及附加依賴項。

      • 右鍵點擊項目 -> 屬性 -> 配置屬性 -> VC++目錄 -> 包含目錄,添加MySQL的include路徑。
      • 配置屬性 -> VC++目錄 -> 庫目錄,添加MySQL的lib路徑。
      • 配置屬性 -> 鏈接器 -> 輸入 -> 附加依賴項,添加libmysql.lib(Windows上)或mysqlclient(Linux上,可能需要添加前綴和后綴,如-lmysqlclient)。
    • Linux
      在Linux上,你通常使用g++或clang++進行編譯。編譯時,你需要使用-I選項指定頭文件路徑,使用-L選項指定庫文件路徑,并使用-l選項鏈接庫文件。例如:

      g++ -o my_program my_program.cpp -I/usr/include/mysql -L/usr/lib/x86_64-linux-gnu/ -lmysqlclient
      
三、連接數據庫

在C/C++中,連接MySQL數據庫通常使用mysql_real_connect函數。

  1. 初始化MySQL對象

    在連接數據庫之前,你需要初始化一個MySQL對象:

    MYSQL *conn = mysql_init(NULL);
    if (conn == NULL) {fprintf(stderr, "mysql_init() failed
    ");exit(1);
    }
    
  2. 連接數據庫

    使用mysql_real_connect函數連接數據庫:

    if (mysql_real_connect(conn, "host", "user", "password", "database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed
    ");mysql_close(conn);exit(1);
    }
    

    其中,"host"是數據庫服務器的地址,"user"是數據庫用戶名,"password"是數據庫密碼,"database"是要連接的數據庫名稱。

四、執行SQL語句

連接數據庫后,你可以使用mysql_querymysql_real_query函數執行SQL語句。

  1. 執行SQL查詢

    使用mysql_query執行簡單的SQL查詢:

    if (mysql_query(conn, "SELECT * FROM table_name")) {fprintf(stderr, "SELECT * error: %s
    ", mysql_error(conn));mysql_close(conn);exit(1);
    }
    
  2. 處理查詢結果

    使用mysql_store_resultmysql_use_result函數獲取查詢結果。mysql_store_result會將整個結果集加載到內存中,適用于結果集較小的情況;mysql_use_result則逐行處理結果集,適用于結果集較大的情況。

    • 使用mysql_store_result

      MYSQL_RES *result = mysql_store_result(conn);
      if (result == NULL) {fprintf(stderr, "mysql_store_result() failed. Error: %s
      ", mysql_error(conn));mysql_close(conn);exit(1);
      }int num_fields = mysql_num_fields(result);
      MYSQL_ROW row;while ((row = mysql_fetch_row(result))) {for(int i = 0; i < num_fields; i++) {printf("%s ", row[i] ? row[i] : "NULL");}printf("
      ");
      }mysql_free_result(result);
      
    • 使用mysql_use_result

      MYSQL_RES *result = mysql_use_result(conn);
      if (result == NULL) {fprintf(stderr, "mysql_use_result() failed. Error: %s
      ", mysql_error(conn));mysql_close(conn);exit(1);
      }MYSQL_ROW row;
      while ((row = mysql_fetch_row(result))) {// 處理每一行數據
      }mysql_free_result(result);
      
五、關閉數據庫連接

在完成數據庫操作后,你需要關閉數據庫連接以釋放資源。

mysql_close(conn);
六、錯誤處理

在處理數據庫操作時,你應該始終檢查每個函數的返回值,并在出現錯誤時打印錯誤信息。MySQL的API提供了mysql_error函數來獲取最近一次操作的錯誤信息。

七、示例程序

以下是一個完整的C++程序示例,它展示了如何連接MySQL數據庫、執行查詢并處理結果:

#include <mysql.h>
#include <iostream>
#include <cstdlib>int main() {MYSQL *conn;MYSQL_RES *res;MYSQL_ROW row;// 初始化MySQL對象conn = mysql_init(NULL);// 檢查初始化是否成功if (conn == NULL) {std::cerr << "mysql_init() failed" << std::endl;exit(1);}// 連接數據庫if (mysql_real_connect(conn, "localhost", "root", "password", "database_name", 0, NULL, 0) == NULL) {std::cerr << "mysql_real_connect() failed. Error: " << mysql_error(conn) << std::endl;mysql_close(conn);exit(1);}// 執行SQL查詢if (mysql_query(conn, "SELECT * FROM table_name")) {std::cerr << "SELECT * error: " << mysql_error(conn) << std::endl;mysql_close(conn);exit(1);}// 獲取查詢結果res = mysql_store_result(conn);if (res == NULL) {std::cerr << "mysql_store_result() failed. Error: " << mysql_error(conn) << std::endl;mysql_close(conn);exit(1);}// 處理查詢結果int num_fields = mysql_num_fields(res);while ((row = mysql_fetch_row(res))) {for (int i = 0; i < num_fields; i++) {std::cout << (row[i] ? row[i] : "NULL") << " ";}std::cout << std::endl;}// 釋放查詢結果mysql_free_result(res);// 關閉數據庫連接mysql_close(conn);return 0;
}

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

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

相關文章

基于EM期望最大化算法的GMM參數估計與三維數據分類系統python源碼

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1 EM算法 E步:期望步 M步:最大化步 4.2 GMM模型 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) 2.算法運行軟件版本 程序運行配置環境&#xff1a; 人工智能算法…

制服小程序的“滑手”:禁用頁面左右滑動全攻略

哈哈&#xff0c;看來你已經很聰明地發現了小程序中左右滑動的“頑皮”行為&#xff01;&#x1f604; 沒錯&#xff0c;我們可以通過設置 disableScroll 屬性來“管教”它&#xff0c;同時結合 CSS 樣式讓頁面既禁得住橫向“亂跑”&#xff0c;又能順暢地上下滾動。你的方案已…

docker學習筆記(1)從安裝docker到使用Portainer部署容器

docker學習筆記第一課 先交代背景 docker宿主機系統&#xff1a;阿里云ubuntu22.04 開發機系統&#xff1a;win11 docker鏡像倉庫&#xff1a;阿里云&#xff0c;此阿里云與宿主機系統沒有關系&#xff0c;是阿里云提供的一個免費的docker倉庫 代碼托管平臺&#xff1a;github&…

stable-diffusion-webui 加載模型文件

背景 stable-diffusion-webui 安裝完畢后&#xff0c;默認的模型生成的效果圖并不理想&#xff0c;可以根據具體需求加載指定的模型文件。國內 modelscope 下載速度較快&#xff0c;以該站為例進行介紹 操作步驟 找到指定的模型文件 在 https://modelscope.cn/models 中查找…

kotlin高級用法總結

Kotlin 是一門功能強大且靈活的編程語言&#xff0c;除了基礎語法外&#xff0c;它還提供了許多高級特性&#xff0c;可以幫助你編寫更簡潔、高效和可維護的代碼。以下是 Kotlin 的一些高級用法&#xff0c;涵蓋了協程、擴展函數、屬性委托、內聯類、反射等內容。 協程&#x…

Linux網絡 NAT、代理服務、內網穿透

NAT 技術 IPv4 協議中存在 IP 地址數量不充足的問題&#xff0c;而 NAT 技術是當前解決 IP 地址不夠用的主要手段 , 是路由器的一個重要功能。NAT 能夠將私有 IP 對外通信時轉為全局 IP&#xff0c;也就是就是一種將私有 IP 和全局 IP 相互轉化的技術方法。 這可以讓很多學…

世界模型在塑造自動駕駛中的作用:綜述

25年2月來自華中理工和百度的論文“”The Role of World Models in Shaping Autonomous Driving: A Comprehensive Survey“。 駕駛世界模型 (DWM) 專注于預測駕駛過程中的場景演變&#xff0c;已成為實現自動駕駛一個有前途的范例。這些方法使自動駕駛系統能夠更好地感知、理…

全向廣播揚聲器在油氣田中的關鍵應用 全方位守護安全

油氣田作為高風險作業場所&#xff0c;安全生產始終是重中之重。在緊急情況下&#xff0c;如何快速、有效地傳達信息&#xff0c;確保人員安全撤離&#xff0c;是油氣田安全管理的關鍵環節。全向廣播揚聲器憑借其全方位覆蓋、高音質輸出和強大的環境適應性&#xff0c;成為油氣…

【AI大模型】AI賦能,使用DeepSeek 高效制作PPT實戰詳解

目錄 一、前言 二、傳統 PPT 制作問題 2.1 傳統方式制作 PPT 2.2 AI 大模型輔助制作 PPT 2.3 適用場景對比分析 2.4 最佳實踐與推薦 三、DeepSeek Kimi 高效制作PPT操作實踐 3.1 Kimi 簡介 3.2 DeepSeek Kimi 制作PPT優勢 3.2.1 DeepSeek 優勢 3.2.2 Kimi 制作PPT優…

【51單片機】程序實驗13.串口通信

主要參考學習資料&#xff1a;B站【普中官方】51單片機手把手教學視頻 開發資料下載鏈接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 前置知識&#xff1a;C語言 單片機套裝&#xff1a;普中STC51單片機開發板A4標準版套餐7 目錄 通信的基本概念串行通信與并行通…

論文閱讀筆記:ArcFace: Additive Angular Margin Loss for Deep Face Recognition

論文閱讀筆記&#xff1a;ArcFace: Additive Angular Margin Loss for Deep Face Recognition 1 背景2 創新點3 方法4 模塊4.1 Softmax4.2 權重歸一化4.3 乘性角度間隔4.4 特征歸一化4.5 加性余弦間隔4.6 加性角度間隔4.7 二值化情況下的比較4.8 目標Logit分析 5 效果5.1 消融實…

代碼隨想錄算法訓練營 | 圖論 | DFS

98. 所有可達路徑// DFS #include <bits/stdc.h> using namespace std;vector<vector<int>> result; vector<int> path;void dfs(const vector<list<int>> &graph, int i, int target) {if (i target) {result.push_back(path);retu…

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推薦指數&#xff1a;#paper/??#? 動機 本文探討了圖神經網絡&#xff08;GNN&#xff09;在遷移學習中“預訓練-微調”框架的局限性及改進方向。現有方法通過預訓練&#xff08…

迷你世界腳本方塊接口:Block

方塊接口&#xff1a;Block 彼得兔 更新時間: 2024-08-27 11:04:56 具體函數名及描述如下&#xff1a; 序號 函數名 函數描述 1 isSolidBlock(...) 是否是固體方塊 2 isLiquidBlock(...) 是否是液體方塊 3 isAirBlock(...) 是否是氣體方塊 4 getBl…

Windows下git疑難:有文件無法被跟蹤

Windows下git疑難&#xff1a;有文件無法被跟蹤 最近在寫一個c# WinFrom程序&#xff0c; 奇怪的是&#xff0c;frmMain.cs這個文件一直無法被跟蹤 研究了很久&#xff0c; 參考這一篇 https://blog.csdn.net/m0_37315653/article/details/83064810 git rm --cached ./ -r 之…

Live2d官方項目運行

Live2d官方項目運行 1-參考網址 教程網址&#xff1a;https://blog.csdn.net/qq_39123467/article/details/131735085live2d官方地址&#xff1a;https://live2d.com/cubism-sdk/download/ 2-上手實踐 1&#xff09;先打開官方項目-全部路徑打開2&#xff09;cd /CubismSdkFo…

BUU43 [BJDCTF2020]The mystery of ip 1

前置知識&#xff1a; X - Forwarded - For注入 X - Forwarded - For&#xff08;XFF&#xff09;是一個 HTTP 頭字段&#xff0c;用于記錄客戶端的真實 IP 地址。當客戶端請求經過代理服務器時&#xff0c;代理服務器會將客戶端的 IP 地址添加到 X - Forwarded - For 頭中。…

張岳教授:語言模型推理與泛化研究 | ICLR 2025 特邀報告與團隊專場

點擊藍字 關注我們 AI TIME歡迎每一位AI愛好者的加入&#xff01; AITIME 01 ICLR 2025預講會特邀報告 AITIME 02 ICLR 2025預講會西湖大學張岳老師實驗室專場 01 AI生成文本的自動化檢測 Glimpse: Enabling White-Box Methods to Use Proprietary Models for Zero-Shot LLM-Ge…

MySQL SQL 優化專題

MySQL SQL 優化專題 1. 插入數據優化 -- 普通插入&#xff08;不推薦&#xff09; INSERT INTO tb_user VALUES(1,tom); INSERT INTO tb_user VALUES(2,cat); INSERT INTO tb_user VALUES(3,jerry);-- 優化方案1&#xff1a;批量插入&#xff08;推薦&#xff0c;不建議超過1…

【AI深度學習基礎】NumPy完全指南進階篇:核心功能與工程實踐(含完整代碼)

NumPy系列文章 入門篇進階篇終極篇 一、引言 在掌握NumPy基礎操作后&#xff0c;開發者常面臨真實工程場景中的三大挑戰&#xff1a;如何優雅地處理高維數據交互&#xff1f;如何在大規模計算中實現內存與性能的平衡&#xff1f;怎樣與深度學習框架實現高效協同&#xff1f;…