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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 原码, 反码与补码基础知识详细介绍

    原码, 反码与补码基础知识详细介绍

    这篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法,需要的朋友可以参考下
    2016-12-12
  • linux下基于C语言的信号编程实例

    linux下基于C语言的信号编程实例

    这篇文章主要介绍了linux下基于C语言的信号编程,实例分析了信号量的基本使用技巧与相关概念,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C语言 指针数组详解及示例代码

    C语言 指针数组详解及示例代码

    本文主要介绍C语言 指针数组,这里提供详细的资料和简单示例代码以便大家学习参考,有需要学习的小伙伴可以参考下
    2016-08-08
  • C语言链表实现通讯录系统课程设计

    C语言链表实现通讯录系统课程设计

    这篇文章主要为大家详细介绍了C语言链表实现通讯录系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++图文并茂分析讲解模板

    C++图文并茂分析讲解模板

    C++语言的模板技术包括函数模板和类模板,模板技术是一种代码重用技术,函数和类是C++语言中两种主要的重用代码形式,这篇文章主要介绍了C++函数模板和类模板,需要的朋友可以参考下
    2022-09-09
  • Qt数据库应用之实现通用数据生成器

    Qt数据库应用之实现通用数据生成器

    有两种应用场景需要用到数据生成器,一种是需要测试数据库性能,一种是随机模拟生成一堆数据,用来测试程序的性能。本文将利用Qt实现通用数据生成器,需要的可以参考一下
    2022-02-02
  • C语言中双链表的基本操作

    C语言中双链表的基本操作

    这篇文章主要介绍了C语言中双链表的基本操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C++利用easyx图形库实现创意天天酷跑小游戏

    C++利用easyx图形库实现创意天天酷跑小游戏

    这篇文章主要为大家详细介绍了C++如何利用easyx图形库实现创意小游戏——天天酷跑,文中的示例代码讲解详细,快跟随小编一起了解一下吧
    2023-03-03
  • C语言每日练习之进制转换

    C语言每日练习之进制转换

    这篇文章主要介绍了C语言进制转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • C++类的定义与实现

    C++类的定义与实现

    这篇文章主要介绍了C++类的定义与实现,违章围绕C++类的定义的相关资料展开全文内容,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-01-01

最新评论