当前位置:首页 > 行业动态 > 正文

c数据库增删改查源程序

“`c,#include,#includeint main() {, sqlite3 *db;, char *err_msg = 0;, int rc = sqlite3_open(“test.db”, &db);, if (rc != SQLITE_OK) {, fprintf(stderr, “Cannot open database: %s,”, sqlite3_errmsg(db));, sqlite3_close(db);, return 1;, } // 创建表, char *sql = “CREATE TABLE IF NOT EXISTS Students(Id INT PRIMARY KEY NOT NULL, Name TEXT NOT NULL, Age INT NOT NULL);”;, rc = sqlite3_exec(db, sql, 0, 0, &err_msg);, if (rc != SQLITE_OK ) {, fprintf(stderr, “SQL error: %s,”, err_msg);, sqlite3_free(err_msg);, } else {, fprintf(stdout, “Table created successfully,”);, } // 插入数据, sql = “INSERT INTO Students (Id, Name, Age) VALUES (1, ‘Alice’, 20);”;, rc = sqlite3_exec(db, sql, 0, 0, &err_msg);, if (rc != SQLITE_OK ) {, fprintf(stderr, “Failed to insert data,”);, fprintf(stderr, “SQL error: %s,”, err_msg);, sqlite3_free(err_msg);, } else {, fprintf(stdout, “Records created successfully,”);, } // 查询数据, sql = “SELECT * FROM Students;”;, rc = sqlite3_exec(db, sql, callback, 0, &err_msg);, if (rc != SQLITE_OK ) {, fprintf(stderr, “Failed to select data,”);, fprintf(stderr, “SQL error: %s,”, err_msg);, sqlite3_free(err_msg);, } else {, fprintf(stdout, “Operation done successfully,”);, } sqlite3_close(db);, return 0;,}static int callback(void *NotUsed, int argc, char **argv, char **azColName){, NotUsed = 0;, for(int i = 0; i

在C语言中,使用数据库进行增删改查(CRUD)操作通常需要结合数据库管理系统(如MySQL、SQLite等)和相应的C语言库(如MySQL Connector/C、SQLite3等),以下是一个简单的示例,展示如何使用C语言连接SQLite数据库并进行增删改查操作。

环境准备

1、安装SQLite:确保你的系统上已安装SQLite,可以从[SQLite官网](https://www.sqlite.org/download.html)下载并安装。

2、安装SQLite3 C接口:大多数Linux发行版可以通过包管理器安装,例如在Ubuntu上运行sudo apt-get install libsqlite3-dev

示例代码

以下是一个使用SQLite3的C程序,演示如何创建表、插入数据、查询数据、更新数据和删除数据。

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
// 回调函数,用于处理查询结果
static int callback(void *NotUsed, int argc, charargv, charazColName) {
    for (int i = 0; i < argc; i++) {
        printf("%s = %s
", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("
");
    return 0;
}
int main() {
    sqlite3 *db;
    char *err_msg = 0;
    int rc;
    // 打开数据库(如果不存在则创建)
    rc = sqlite3_open("test.db", &db);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "Cannot open database: %s
", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }
    // 创建表
    const char *sql_create_table = "CREATE TABLE IF NOT EXISTS Students(" 
                                   "ID INTEGER PRIMARY KEY AUTOINCREMENT," 
                                   "Name TEXT NOT NULL," 
                                   "Age INTEGER NOT NULL);";
    rc = sqlite3_exec(db, sql_create_table, 0, 0, &err_msg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s
", err_msg);
        sqlite3_free(err_msg);
        sqlite3_close(db);
        return 1;
    }
    // 插入数据
    const char *sql_insert = "INSERT INTO Students (Name, Age) VALUES ('Alice', 21);" 
                             "INSERT INTO Students (Name, Age) VALUES ('Bob', 22);";
    rc = sqlite3_exec(db, sql_insert, 0, 0, &err_msg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s
", err_msg);
        sqlite3_free(err_msg);
        sqlite3_close(db);
        return 1;
    }
    // 查询数据
    const char *sql_select = "SELECT * FROM Students;";
    printf("Querying data:
");
    rc = sqlite3_exec(db, sql_select, callback, 0, &err_msg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s
", err_msg);
        sqlite3_free(err_msg);
        sqlite3_close(db);
        return 1;
    }
    // 更新数据
    const char *sql_update = "UPDATE Students SET Age = 23 WHERE Name = 'Alice';";
    rc = sqlite3_exec(db, sql_update, 0, 0, &err_msg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s
", err_msg);
        sqlite3_free(err_msg);
        sqlite3_close(db);
        return 1;
    }
    // 删除数据
    const char *sql_delete = "DELETE FROM Students WHERE Name = 'Bob';";
    rc = sqlite3_exec(db, sql_delete, 0, 0, &err_msg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s
", err_msg);
        sqlite3_free(err_msg);
        sqlite3_close(db);
        return 1;
    }
    // 再次查询以验证更新和删除
    printf("Querying data after update and delete:
");
    rc = sqlite3_exec(db, sql_select, callback, 0, &err_msg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s
", err_msg);
        sqlite3_free(err_msg);
        sqlite3_close(db);
        return 1;
    }
    // 关闭数据库
    sqlite3_close(db);
    return 0;
}

编译与运行

将上述代码保存为crud.c,然后使用以下命令编译并运行:

gcc -o crud crud.c -lsqlite3
./crud

FAQs

Q1: 如果数据库文件已经存在,sqlite3_open会做什么?

A1: 如果指定的数据库文件已经存在,sqlite3_open会打开该数据库文件,如果文件不存在,它会尝试创建一个新文件,如果由于权限问题无法创建或打开文件,会返回一个错误。

Q2: 如何处理SQL执行过程中的错误?

A2: 在每次调用sqlite3_exec后,应该检查返回码是否为SQLITE_OK,如果不是,可以使用sqlite3_errmsg获取错误信息,并根据需要进行错误处理,例如打印错误信息或采取其他措施,记得在使用完错误信息后调用sqlite3_free释放内存。

小编有话说

通过以上示例,你可以看到在C语言中使用SQLite进行基本的数据库操作并不复杂,关键在于理解SQL语句以及如何通过C语言接口与数据库交互,对于更复杂的应用,可能需要进一步学习SQL优化、事务处理以及更高级的数据库特性,希望这个示例能帮助你入门C语言中的数据库编程!

0