当前位置:首页 > 问答 > 正文

C语言怎么操作SQL数据库里的数据,增删改查那些事儿简单演示

要直接用C语言去碰数据库,你得先找一个“翻译官”,也就是数据库的客户端库,这里我们用SQLite来举例,因为它最简单,不需要单独安装数据库服务器,一个文件就是一个数据库,非常适合上手,你要做的第一件事,是去SQLite官网(来源:SQLite官方网站)下载一个叫“sqlite3.c”和“sqlite3.h”的文件,把它们放到你的项目里。

就是写代码连接了,想象一下,你要打开一个笔记本(数据库文件)来读写字,如果这个笔记本不存在,SQLite会直接给你创建一个新的。

#include <stdio.h>
#include <sqlite3.h> // 这就是我们引入的“翻译官”手册
int main() {
    sqlite3 *db; // 这是一个指针,代表我们将要操作的数据库对象
    char *err_msg = 0; // 用来存出错信息
    // 打开或创建数据库文件,名字叫“test.db”
    int rc = sqlite3_open("test.db", &db);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "打不开数据库:%s\n", sqlite3_errmsg(db));
        return 1;
    } else {
        fprintf(stdout, "数据库打开成功!\n");
    }

上面这段代码(思路来源于SQLite官方文档关于sqlite3_open的说明)就完成了连接,现在数据库“db”就在你手里了,可以开始增删改查。

C语言怎么操作SQL数据库里的数据,增删改查那些事儿简单演示

第一件事,建个表。 好比在笔记本里先画好表格的格子,这里我们创建一个简单的“学生”表。

    // 创建表的SQL语句
    char *sql = "CREATE TABLE IF NOT EXISTS 学生(学号 INT PRIMARY KEY, 姓名 TEXT, 成绩 INT);";
    // 执行这条SQL语句
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL错误:%s\n", err_msg);
        sqlite3_free(err_msg);
    } else {
        fprintf(stdout, "表创建成功!\n");
    }

sqlite3_exec函数(来源:SQLite官方文档对sqlite3_exec的描述)是个多面手,可以用来执行不返回数据的SQL命令,比如创建、插入、删除、更新。

C语言怎么操作SQL数据库里的数据,增删改查那些事儿简单演示

第二件事,插入数据(增)。 往表格里写一行记录。

    // 插入一条学生记录
    sql = "INSERT INTO 学生(学号, 姓名, 成绩) VALUES(1001, '小明', 85);";
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
    // ... 同样的错误检查
    printf("插入数据成功!\n");

第三件事,查询数据(查)。 这是最复杂的,因为你要把数据从数据库里拿出来看,这里不能用sqlite3_exec了,需要用另外两个函数配合:sqlite3_prepare_v2sqlite3_step

C语言怎么操作SQL数据库里的数据,增删改查那些事儿简单演示

    // 查询所有学生
    sql = "SELECT * FROM 学生;";
    sqlite3_stmt *stmt; // 这是一个“语句对象”,代表准备好要执行的SQL
    rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
    if (rc == SQLITE_OK) {
        // 一步一步地遍历查询结果
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            // 按列号取出数据,第一列是0
            int id = sqlite3_column_int(stmt, 0);
            const char *name = (const char *)sqlite3_column_text(stmt, 1);
            int score = sqlite3_column_int(stmt, 2);
            printf("学号:%d, 姓名:%s, 成绩:%d\n", id, name, score);
        }
    }
    sqlite3_finalize(stmt); // 用完记得清理这个语句对象

这个过程就像你准备好一个问题(prepare),然后一步步(step)问,每步得到一行答案,再从这行答案里按位置拿具体的数据(column)。

第四件事,更新数据(改)。 把小明成绩改一下。

    sql = "UPDATE 学生 SET 成绩 = 90 WHERE 姓名 = '小明';";
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
    // ... 错误检查
    printf("更新数据成功!\n");

第五件事,删除数据(删)。 删除成绩小于60的记录。

    sql = "DELETE FROM 学生 WHERE 成绩 < 60;";
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
    // ... 错误检查
    printf("删除数据成功!\n");

最重要的一步, 一定要关闭数据库!就像用完笔记本要合上。

    sqlite3_close(db);
    return 0;
}

整个过程的核心就是:*连接数据库 -> 用sqlite3_exec执行不返回数据的SQL(增、删、改、建表) -> 用sqlite3_prepare_v2/sqlite3_step/`sqlite3column`这一套组合拳来查询数据 -> 最后关闭连接。** 记住这个流程,你就掌握了C语言操作SQL数据库最基本的方法,其他像MySQL或PostgreSQL,思路完全一样,只是初始连接的方式和用的“翻译官”库(如MySQL Connector/C)不同而已(来源:各类数据库客户端库的通用设计模式)。

备用