限时福利领取


在之前的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使用详解

  1. 初始化连接

使用mysql_init()初始化MySQL连接对象,这是所有操作的第一步:

MYSQL *conn = mysql_init(nullptr);
if(!conn) {
    // 错误处理
}
  1. 建立数据库连接

mysql_real_connect()函数用于建立实际连接,需要提供主机、用户名、密码等参数:

MYSQL *connection = mysql_real_connect(
    conn, 
    "localhost", 
    "username", 
    "password", 
    "database", 
    3306, 
    nullptr, 
    0
);
  1. 执行SQL查询

通过mysql_query()执行SQL语句,支持所有标准SQL命令:

int result = mysql_query(conn, "SELECT * FROM users");
if(result != 0) {
    // 错误处理
}
  1. 处理查询结果

对于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数据库的交互。这些接口提供了完整的数据库操作能力,适合开发各种数据库应用。

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐