C语言操作MySQL数据库的完整指南
·
在之前的MySQL学习基础上,今天我们来探索如何使用C语言与MySQL数据库进行交互。通过MySQL提供的C API,我们可以轻松实现数据库的连接、查询和结果处理。
准备工作
首先确保系统已安装MySQL开发库,通常包含在/usr/include/mysql/和/usr/lib/目录下。编译时需要链接mysqlclient库:
g++ -o program program.c -std=c++11 -lmysqlclient -L /usr/lib/x86_64-linux-gnu/
核心API使用详解
- 初始化连接
使用mysql_init()初始化MySQL连接对象,这是所有操作的第一步:
MYSQL *conn = mysql_init(nullptr);
if(!conn) {
// 错误处理
}
- 建立数据库连接
mysql_real_connect()函数用于建立实际连接,需要提供主机、用户名、密码等参数:
MYSQL *connection = mysql_real_connect(
conn,
"localhost",
"username",
"password",
"database",
3306,
nullptr,
0
);
- 执行SQL查询
通过mysql_query()执行SQL语句,支持所有标准SQL命令:
int result = mysql_query(conn, "SELECT * FROM users");
if(result != 0) {
// 错误处理
}
- 处理查询结果
对于SELECT查询,我们需要使用结果集处理函数:
MYSQL_RES *res = mysql_store_result(conn);
// 获取字段信息
int num_fields = mysql_num_fields(res);
MYSQL_FIELD *fields = mysql_fetch_fields(res);
// 遍历结果集
while(MYSQL_ROW row = mysql_fetch_row(res)) {
for(int i=0; i<num_fields; i++) {
printf("%s ", row[i] ? row[i] : "NULL");
}
printf("\n");
}
mysql_free_result(res); // 必须释放结果集

完整示例代码
下面是一个简单的交互式MySQL客户端实现:
#include <mysql/mysql.h>
#include <iostream>
#include <string>
int main() {
MYSQL *conn = mysql_init(nullptr);
if(!conn) {
std::cerr << "初始化失败" << std::endl;
return 1;
}
if(!mysql_real_connect(conn, "localhost", "user", "password", "testdb", 0, nullptr, 0)) {
std::cerr << "连接失败: " << mysql_error(conn) << std::endl;
mysql_close(conn);
return 1;
}
std::string query;
while(true) {
std::cout << "mysql> ";
std::getline(std::cin, query);
if(query == "quit" || query.empty()) break;
if(mysql_query(conn, query.c_str())) {
std::cerr << "查询错误: " << mysql_error(conn) << std::endl;
continue;
}
MYSQL_RES *result = mysql_store_result(conn);
if(result) {
// 处理SELECT查询结果
int num_fields = mysql_num_fields(result);
MYSQL_ROW row;
while((row = mysql_fetch_row(result))) {
for(int i=0; i<num_fields; i++) {
std::cout << (row[i] ? row[i] : "NULL") << "\t";
}
std::cout << std::endl;
}
mysql_free_result(result);
}
}
mysql_close(conn);
return 0;
}

注意事项
- 每次使用
mysql_store_result()后必须调用mysql_free_result()释放内存 - 连接失败时使用
mysql_error()获取错误信息 - 注意字符编码设置,建议统一使用UTF-8
- 所有数据库操作完成后必须调用
mysql_close()关闭连接
通过以上API,我们可以在C/C++程序中轻松实现与MySQL数据库的交互。这些接口提供了完整的数据库操作能力,适合开发各种数据库应用。
更多推荐


所有评论(0)