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

C/C++連接MySQL并發(fā)送SQL請求的實戰(zhàn)指南

 更新時間:2026年02月12日 08:23:18   作者:大黃評測  
本文將聚焦于 如何使用 C/C++ 連接 MySQL 并發(fā)送 SQL 請求,涵蓋從環(huán)境準備到執(zhí)行查詢的完整流程,并提供可直接運行的示例代碼,希望對大家有所幫助

在開發(fā)高性能或系統(tǒng)級應(yīng)用時,C/C++因其接近硬件、運行效率高的特點被廣泛使用。而當這類應(yīng)用需要與數(shù)據(jù)庫交互時,MySQL 提供了官方的 C API(即 MySQL Connector/C),使得開發(fā)者可以直接在 C/C++ 程序中連接、查詢和操作 MySQL 數(shù)據(jù)庫。

本文將聚焦于 如何使用 C/C++ 連接 MySQL 并發(fā)送 SQL 請求,涵蓋從環(huán)境準備到執(zhí)行查詢的完整流程,并提供可直接運行的示例代碼。

一、準備工作

1. 安裝 MySQL 開發(fā)庫

在 Linux 系統(tǒng)(如 Ubuntu/Debian)上,可通過以下命令安裝 MySQL 客戶端開發(fā)庫:

sudo apt-get install libmysqlclient-dev

在 CentOS/RHEL 上:

sudo yum install mysql-devel
# 或(較新版本)
sudo dnf install mysql-devel

Windows 用戶可從 MySQL 官網(wǎng) 下載 Connector/C。

2. 編譯鏈接選項

編譯時需鏈接 libmysqlclient 庫。例如:

gcc -o myapp myapp.c -lmysqlclient

二、基本流程概覽

使用 C API 操作 MySQL 的典型步驟如下:

  • 初始化 MySQL 連接句柄(mysql_init()
  • 連接到數(shù)據(jù)庫(mysql_real_connect()
  • 發(fā)送 SQL 請求(mysql_query()mysql_real_query()
  • 處理結(jié)果集(如有)(mysql_store_result() / mysql_use_result()
  • 釋放資源并關(guān)閉連接(mysql_close()

三、連接數(shù)據(jù)庫

#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    MYSQL *conn;
    const char *server = "localhost";
    const char *user = "your_user";
    const char *password = "your_password";
    const char *database = "test_db";

    // 初始化連接結(jié)構(gòu)
    conn = mysql_init(NULL);
    if (conn == NULL) {
        fprintf(stderr, "mysql_init() failed\n");
        exit(1);
    }

    // 連接數(shù)據(jù)庫
    if (mysql_real_connect(conn, server, user, password, database, 0, NULL, 0) == NULL) {
        fprintf(stderr, "Connection failed: %s\n", mysql_error(conn));
        mysql_close(conn);
        exit(1);
    }

    printf("Connected to MySQL successfully!\n");

    // 后續(xù)操作...

    mysql_close(conn);
    return 0;
}

注意:請將 your_user、your_passwordtest_db 替換為實際值。

四、發(fā)送 SQL 請求

1. 執(zhí)行非查詢語句(INSERT / UPDATE / DELETE)

這些語句不返回結(jié)果集,只需檢查是否執(zhí)行成功:

const char *sql = "INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')";
if (mysql_query(conn, sql)) {
    fprintf(stderr, "Query error: %s\n", mysql_error(conn));
} else {
    printf("Insert successful. Affected rows: %llu\n", mysql_affected_rows(conn));
}

2. 執(zhí)行查詢語句(SELECT)

查詢會返回結(jié)果集,需進一步處理:

const char *query = "SELECT id, name, email FROM users";
if (mysql_query(conn, query)) {
    fprintf(stderr, "SELECT error: %s\n", mysql_error(conn));
    return 1;
}

MYSQL_RES *result = mysql_store_result(conn);
if (result == NULL) {
    fprintf(stderr, "Store result error: %s\n", mysql_error(conn));
    return 1;
}

// 獲取字段數(shù)量
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\t", row[i] ? row[i] : "NULL");
    }
    printf("\n");
}

// 釋放結(jié)果集
mysql_free_result(result);

使用 mysql_store_result() 會一次性將全部結(jié)果加載到內(nèi)存,適用于數(shù)據(jù)量較小的場景;若處理大量數(shù)據(jù),可考慮 mysql_use_result() 流式讀取。

五、錯誤處理建議

  • 始終檢查 mysql_query() 的返回值。
  • 使用 mysql_error(conn) 獲取詳細錯誤信息。
  • 在程序退出前務(wù)必調(diào)用 mysql_close() 釋放連接資源。

六、編譯與運行示例

假設(shè)源文件為 mysql_demo.c,編譯命令如下:

gcc -o mysql_demo mysql_demo.c $(mysql_config --cflags --libs)

mysql_config 是 MySQL 提供的工具,可自動輸出正確的編譯和鏈接參數(shù)。

七、小結(jié)

通過 MySQL 的 C API,C/C++ 程序可以高效地與數(shù)據(jù)庫交互。雖然相比高級語言(如 Python、Java)略顯繁瑣,但在對性能、資源控制有嚴格要求的場景下,C/C++ 仍是不可替代的選擇。

掌握連接、發(fā)送請求、處理結(jié)果這三個核心環(huán)節(jié),即可構(gòu)建出穩(wěn)定可靠的數(shù)據(jù)庫客戶端程序。后續(xù)還可深入學習預(yù)處理語句(mysql_stmt_* 系列函數(shù))以提升安全性和效率,防止 SQL 注入。

到此這篇關(guān)于C/C++連接MySQL并發(fā)送SQL請求的實戰(zhàn)指南的文章就介紹到這了,更多相關(guān)C++連接MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言中求和、計算平均值、方差和標準差的實例

    C語言中求和、計算平均值、方差和標準差的實例

    這篇文章主要介紹了C語言中求和、計算平均值、方差和標準差的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++基于socket多線程實現(xiàn)網(wǎng)絡(luò)聊天室

    C++基于socket多線程實現(xiàn)網(wǎng)絡(luò)聊天室

    這篇文章主要為大家詳細介紹了C++基于socket多線程實現(xiàn)網(wǎng)絡(luò)聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語言函數(shù)的遞歸調(diào)用詳情

    C語言函數(shù)的遞歸調(diào)用詳情

    這篇文章主要介紹了C語言函數(shù)的遞歸調(diào)用詳情,遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用,主要的思考方式就是大事化小,下文具體的相關(guān)介紹,需要的小伙伴可以參考一下
    2022-04-04
  • C語言深入探索之單鏈表與typedef的用法

    C語言深入探索之單鏈表與typedef的用法

    typedef為C語言的關(guān)鍵字,作用是為一種數(shù)據(jù)類型定義一個新名字,單鏈表是后面要學的雙鏈表以及循環(huán)鏈表的基礎(chǔ),要想繼續(xù)深入了解數(shù)據(jù)結(jié)構(gòu)以及C語言,我們就要奠定好這塊基石!接下來就和我一起學習吧
    2022-05-05
  • C語言 棧的表示和實現(xiàn)詳細介紹

    C語言 棧的表示和實現(xiàn)詳細介紹

    這篇文章主要介紹了C語言 棧的表示和實現(xiàn)詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • C++中空指針訪問成員函數(shù)的實現(xiàn)

    C++中空指針訪問成員函數(shù)的實現(xiàn)

    本文主要介紹了C++中空指針訪問成員函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-02-02
  • 詳解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0

    詳解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0

    這篇文章主要介紹了詳解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C++實現(xiàn)LeetCode(76.最小窗口子串)

    C++實現(xiàn)LeetCode(76.最小窗口子串)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(76.最小窗口子串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)隨機發(fā)牌

    C語言實現(xiàn)隨機發(fā)牌

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)隨機發(fā)牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 構(gòu)建mfc窗體的簡單示例

    構(gòu)建mfc窗體的簡單示例

    這篇文章主要介紹了構(gòu)建mfc窗體的簡單示例,需要的朋友可以參考下
    2014-04-04

最新評論

康马县| 图片| 中方县| 新邵县| 自贡市| 集安市| 德令哈市| 洪洞县| 额敏县| 京山县| 天镇县| 扶绥县| 寻甸| 渑池县| 从化市| 武功县| 满洲里市| 调兵山市| 高雄市| 邵阳市| 枝江市| 长治县| 大埔县| 出国| 修武县| 桑植县| 临漳县| 福建省| 清苑县| 蒲城县| 日喀则市| 莲花县| 奉节县| 浑源县| 田林县| 原平市| 武冈市| 兴海县| 杨浦区| 东宁县| 湖口县|