C语言数据库连接与操作

2025-05发布7次浏览

C语言本身并不直接支持数据库操作,但通过调用数据库的API或使用第三方库(如ODBC、MySQL C Connector等),可以实现与数据库的连接和操作。本文将详细介绍如何在C语言中实现数据库的连接、查询、更新以及结果处理等基本操作。

数据库连接基础

在C语言中进行数据库操作的第一步是建立数据库连接。这通常需要使用特定数据库的驱动程序或接口。以MySQL为例,可以通过MySQL提供的C API来完成这一任务。

安装MySQL C Connector

首先需要安装MySQL C Connector库。可以通过包管理器或者从MySQL官网下载并安装。

连接数据库

以下是一个简单的代码示例,展示如何连接到MySQL数据库:

#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    conn = mysql_init(NULL);

    if (!mysql_real_connect(conn, "localhost", "root", "password", "testdb", 0, NULL, 0)) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    printf("Connected to database!\n");

    mysql_close(conn);
    return 0;
}

执行SQL语句

连接成功后,可以执行各种SQL语句,包括但不限于SELECT、INSERT、UPDATE和DELETE。

查询数据

查询数据时,可以使用mysql_query函数执行SQL命令,并通过mysql_store_result获取结果集。

if (mysql_query(conn, "SELECT id, name FROM users")) {
    fprintf(stderr, "%s\n", mysql_error(conn));
    exit(1);
}

res = mysql_store_result(conn);

if (res) {
    while ((row = mysql_fetch_row(res))) {
        printf("ID: %s, Name: %s\n", row[0], row[1]);
    }
    mysql_free_result(res);
} else {
    fprintf(stderr, "%s\n", mysql_error(conn));
}

处理事务

对于需要保证数据一致性的操作,可以使用事务处理机制。开始一个事务,执行一系列SQL语句,然后根据情况提交或回滚事务。

if (mysql_query(conn, "START TRANSACTION")) {
    fprintf(stderr, "%s\n", mysql_error(conn));
    goto cleanup;
}

// 假设这里有一些插入或更新操作

if (mysql_query(conn, "COMMIT")) {
    fprintf(stderr, "%s\n", mysql_error(conn));
    mysql_query(conn, "ROLLBACK");
}
cleanup:
    mysql_close(conn);

错误处理

错误处理是数据库编程中的重要部分。始终检查每个数据库操作的结果,并在出错时采取适当的措施。

if (mysql_query(conn, "SOME QUERY")) {
    fprintf(stderr, "Error: %s\n", mysql_error(conn));
    // 根据需要执行其他错误处理逻辑
}

流程图:数据库操作流程

sequenceDiagram
    participant App as Application
    participant DB as Database
    App->>DB: Connect
    opt Connection Failed
        App-->>App: Error Handling
    end
    App->>DB: Execute SQL
    DB-->>App: Result Set
    App->>App: Process Data
    App->>DB: Disconnect