080. 使用C语言实现简单的数据库操作

在C语言中,实现简单的数据库操作通常涉及使用SQL语句与数据库进行交互。虽然C语言本身不直接支持数据库操作,但可以通过数据库的API或第三方库来实现。常见的数据库包括SQLite、MySQL和PostgreSQL等。

SQLite是一个轻量级的嵌入式数据库,非常适合小型项目和学习用途。

1. 安装SQLite

在Linux上,可以通过包管理器安装SQLite。例如,在Ubuntu上,可以使用以下命令安装SQLite开发库:

sudo apt-get install sqlite3 libsqlite3-dev

在Windows上,可以从SQLite官网下载预编译的二进制文件,并将其添加到系统的PATH中。

2. 示例代码:使用SQLite创建数据库、表和插入数据

#include <stdio.h>
#include <sqlite3.h>

// 回调函数:用于处理查询结果
static int callback(void* data, int argc, char** argv, char** azColName) {
    int i;
    for (i = 0; i < argc; i++) {
        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");
    return 0;
}

int main(int argc, char* argv[]) {
    sqlite3* db;
    char* zErrMsg = 0;
    int rc;

    // 打开数据库
    rc = sqlite3_open("test.db", &db);
    if (rc) {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    } else {
        fprintf(stderr, "Opened database successfully\n");
    }

    // 创建表
    const char* createTableSQL = "CREATE TABLE IF NOT EXISTS COMPANY("
                                 "ID INT PRIMARY KEY NOT NULL,"
                                 "NAME TEXT NOT NULL,"
                                 "AGE INT NOT NULL,"
                                 "ADDRESS CHAR(50),"
                                 "SALARY REAL );";
    rc = sqlite3_exec(db, createTableSQL, 0, 0, &zErrMsg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    } else {
        fprintf(stdout, "Table created successfully\n");
    }

    // 插入数据
    const char* insertSQL = "INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) "
                            "VALUES (1, 'Paul', 32, 'California', 20000.00 );";
    rc = sqlite3_exec(db, insertSQL, 0, 0, &zErrMsg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    } else {
        fprintf(stdout, "Records created successfully\n");
    }

    // 查询数据
    const char* selectSQL = "SELECT * FROM COMPANY;";
    rc = sqlite3_exec(db, selectSQL, callback, 0, &zErrMsg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    } else {
        fprintf(stdout, "Operation done successfully\n");
    }

    // 关闭数据库
    sqlite3_close(db);

    return 0;
}

3. 编译和运行

在Linux上,可以使用以下命令编译和运行程序:

gcc -o sqlite_example sqlite_example.c -lsqlite3
./sqlite_example

在Windows上,需要确保SQLite的动态链接库(DLL)在系统的PATH中,或者将DLL文件放在与可执行文件相同的目录下。

4. 示例运行

运行程序后,会创建一个名为test.db的数据库文件,并在其中创建一个COMPANY表,插入一条记录,并查询显示所有记录。

输出:

Opened database successfully
Table created successfully
Records created successfully
ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 20000.0

Operation done successfully

5. 注意事项

  1. 数据库文件:SQLite数据库是一个单一的文件,通常以.db为扩展名。如果文件不存在,sqlite3_open会自动创建它。
  2. SQL语句:使用sqlite3_exec函数执行SQL语句。该函数可以执行创建表、插入数据、查询数据等操作。
  3. 回调函数:查询结果通过回调函数处理。回调函数的参数包括查询结果的列名和列值。
  4. 错误处理:使用sqlite3_errmsg获取错误信息,并使用sqlite3_free释放错误信息的内存。
  5. 关闭数据库:使用sqlite3_close关闭数据库连接,确保释放所有资源。

6. 总结

通过使用SQLite,可以在C语言中实现简单的数据库操作。SQLite是一个轻量级的嵌入式数据库,适用于小型项目和学习用途。通过掌握SQLite的基本操作,可以实现数据的存储、查询和管理。在实际开发中,可以根据具体需求选择合适的数据库系统。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)