掌握C/C++连接MySQL数据库是开发高性能后端服务的关键技能。本文将详细介绍MySQL C API的核心接口与典型应用场景,助你快速实现程序与数据库的高效交互。
虽然MySQL客户端可直接执行SQL语句,但实际开发中需要通过编程语言访问数据库。本文重点讲解如何使用MySQL官方C API实现C/C++程序与数据库的交互。

准备工作包括:创建专用数据库用户账号,建立测试数据库conn,安装必要的开发库。在CentOS系统可通过yum install mysql-devel命令安装所需头文件和库文件。
MySQL C API设计遵循"打开-操作-关闭"模式,数据库连接对应MYSQL句柄类型。
mysql_init()
函数原型:MYSQL *mysql_init(MYSQL *mysql)
功能:初始化MYSQL连接句柄,需在其他API调用前执行。
示例:MYSQL *my = mysql_init(nullptr);
mysql_real_connect()
函数原型: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)
功能:建立实际数据库连接。
连接成功后建议设置字符集为utf8mb4以避免中文乱码问题。
mysql_query()
函数原型:int mysql_query(MYSQL *mysql, const char *q);
功能:执行SQL语句,成功返回0。
查询语句需配合结果集处理函数:
mysql_store_result()
函数原型:MYSQL_RES *mysql_store_result(MYSQL *mysql);
功能:将查询结果集存储到本地内存。
必须调用mysql_free_result()释放结果集内存。
结果集解析相关函数:
| 成员名 | 类型 | 说明 |
|---|---|---|
name | char * | 列名(字段名) |
table | char * | 所属表名 |
db | char * | 所属数据库名 |
type | enum enum_field_types | 字段数据类型 |
// 示例代码展示结果集处理
MYSQL_FIELD *fields_array = mysql_fetch_fields(res);
for(my_ulonglong i = 0; i < fields; i++)
std::cout << fields_array[i].name << 't';
std::cout << std::endl;
my_ulonglong rows = mysql_num_rows(res);
my_ulonglong fields = mysql_num_fields(res);
for(my_ulonglong i = 0; i < rows; i++)
{
MYSQL_ROW data = mysql_fetch_row(res);
for(my_ulonglong j = 0; j < fields; j++)
{
std::cout << data[j] << "t";
}
std::cout << std::endl;
}实际应用中建议使用连接池管理数据库连接,提升性能。
本文详细讲解了C/C++连接MySQL的核心API及典型应用流程。通过掌握这些接口,开发者可以构建高效可靠的数据访问层,为业务系统提供稳定数据支持。