C/C++连接MySQL并发送SQL请求的实战指南

 更新时间:2026年02月12日 08:23:18   作者:大黄评测  
本文将聚焦于 如何使用 C/C++ 连接 MySQL 并发送 SQL 请求,涵盖从环境准备到执行查询的完整流程,并提供可直接运行的示例代码,希望对大家有所帮助

在开发高性能或系统级应用时,C/C++因其接近硬件、运行效率高的特点被广泛使用。而当这类应用需要与数据库交互时,MySQL 提供了官方的 C API(即 MySQL Connector/C),使得开发者可以直接在 C/C++ 程序中连接、查询和操作 MySQL 数据库。

本文将聚焦于 如何使用 C/C++ 连接 MySQL 并发送 SQL 请求,涵盖从环境准备到执行查询的完整流程,并提供可直接运行的示例代码。

一、准备工作

1. 安装 MySQL 开发库

在 Linux 系统(如 Ubuntu/Debian)上,可通过以下命令安装 MySQL 客户端开发库:

sudo apt-get install libmysqlclient-dev

在 CentOS/RHEL 上:

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

Windows 用户可从 MySQL 官网 下载 Connector/C。

2. 编译链接选项

编译时需链接 libmysqlclient 库。例如:

gcc -o myapp myapp.c -lmysqlclient

二、基本流程概览

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

  • 初始化 MySQL 连接句柄(mysql_init()
  • 连接到数据库(mysql_real_connect()
  • 发送 SQL 请求(mysql_query()mysql_real_query()
  • 处理结果集(如有)(mysql_store_result() / mysql_use_result()
  • 释放资源并关闭连接(mysql_close()

三、连接数据库

#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";

    // 初始化连接结构
    conn = mysql_init(NULL);
    if (conn == NULL) {
        fprintf(stderr, "mysql_init() failed\n");
        exit(1);
    }

    // 连接数据库
    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");

    // 后续操作...

    mysql_close(conn);
    return 0;
}

注意:请将 your_useryour_passwordtest_db 替换为实际值。

四、发送 SQL 请求

1. 执行非查询语句(INSERT / UPDATE / DELETE)

这些语句不返回结果集,只需检查是否执行成功:

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. 执行查询语句(SELECT)

查询会返回结果集,需进一步处理:

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;
}

// 获取字段数量
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");
}

// 释放结果集
mysql_free_result(result);

使用 mysql_store_result() 会一次性将全部结果加载到内存,适用于数据量较小的场景;若处理大量数据,可考虑 mysql_use_result() 流式读取。

五、错误处理建议

  • 始终检查 mysql_query() 的返回值。
  • 使用 mysql_error(conn) 获取详细错误信息。
  • 在程序退出前务必调用 mysql_close() 释放连接资源。

六、编译与运行示例

假设源文件为 mysql_demo.c,编译命令如下:

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

mysql_config 是 MySQL 提供的工具,可自动输出正确的编译和链接参数。

七、小结

通过 MySQL 的 C API,C/C++ 程序可以高效地与数据库交互。虽然相比高级语言(如 Python、Java)略显繁琐,但在对性能、资源控制有严格要求的场景下,C/C++ 仍是不可替代的选择。

掌握连接、发送请求、处理结果这三个核心环节,即可构建出稳定可靠的数据库客户端程序。后续还可深入学习预处理语句(mysql_stmt_* 系列函数)以提升安全性和效率,防止 SQL 注入。

到此这篇关于C/C++连接MySQL并发送SQL请求的实战指南的文章就介绍到这了,更多相关C++连接MySQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中求和、计算平均值、方差和标准差的实例

    C语言中求和、计算平均值、方差和标准差的实例

    这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C++基于socket多线程实现网络聊天室

    C++基于socket多线程实现网络聊天室

    这篇文章主要为大家详细介绍了C++基于socket多线程实现网络聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C语言函数的递归调用详情

    C语言函数的递归调用详情

    这篇文章主要介绍了C语言函数的递归调用详情,递归做为一种算法在程序设计语言中广泛应用,主要的思考方式就是大事化小,下文具体的相关介绍,需要的小伙伴可以参考一下
    2022-04-04
  • C语言深入探索之单链表与typedef的用法

    C语言深入探索之单链表与typedef的用法

    typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,单链表是后面要学的双链表以及循环链表的基础,要想继续深入了解数据结构以及C语言,我们就要奠定好这块基石!接下来就和我一起学习吧
    2022-05-05
  • C语言 栈的表示和实现详细介绍

    C语言 栈的表示和实现详细介绍

    这篇文章主要介绍了C语言 栈的表示和实现详细介绍的相关资料,需要的朋友可以参考下
    2016-12-12
  • C++中空指针访问成员函数的实现

    C++中空指针访问成员函数的实现

    本文主要介绍了C++中空指针访问成员函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    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++实现LeetCode(76.最小窗口子串)

    C++实现LeetCode(76.最小窗口子串)

    这篇文章主要介绍了C++实现LeetCode(76.最小窗口子串),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言实现随机发牌

    C语言实现随机发牌

    这篇文章主要为大家详细介绍了C语言实现随机发牌,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 构建mfc窗体的简单示例

    构建mfc窗体的简单示例

    这篇文章主要介绍了构建mfc窗体的简单示例,需要的朋友可以参考下
    2014-04-04

最新评论