📜  使用C C++和SQLite的SQL(1)

📅  最后修改于: 2023-12-03 15:06:52.171000             🧑  作者: Mango

使用C/C++和SQLite的SQL

简介

SQLite是一个轻量级的关系数据库管理系统,被广泛应用于各种类型的设备和应用程序中,以保存数据。C/C++是一门通用的编程语言,而SQLite的API提供了许多用于C/C++编程的接口。在本文中,我们将介绍如何使用C/C++和SQLite的SQL语言来创建和管理SQLite数据库,并使用示例代码来演示如何执行SQL查询和更新语句。

安装SQLite

要开始使用SQLite,首先需要在您的开发环境中安装它。如果您使用的是Linux操作系统,可以在终端中使用以下命令来安装:

sudo apt-get install sqlite3 libsqlite3-dev

对于其他操作系统,请访问SQLite官方网站(https://www.sqlite.org/)下载并按照说明进行安装。

创建数据库

在使用SQLite之前,您需要先创建一个数据库。以下是使用C/C++代码创建一个名为'example.db'的SQLite数据库的示例:

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

int main() {
    sqlite3* db;
    int result = sqlite3_open("example.db", &db);

    if (result != SQLITE_OK) {
        printf("数据库创建失败: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    printf("数据库创建成功!\n");
    sqlite3_close(db);
    return 0;
}

在上面的示例中,我们使用了sqlite3_open()函数来创建一个名为'example.db'的数据库。如果数据库创建成功,该函数将返回SQLITE_OK,否则将返回错误代码,并通过sqlite3_errmsg()函数输出错误信息。

创建表格

在SQLite中,将数据存储在表格中。要创建一个表格,您需要确定表格的名称、列名以及各列的数据类型。以下是使用C/C++代码创建一个名为'users'的表格的示例:

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

int main() {
    sqlite3* db;
    int result = sqlite3_open("example.db", &db);

    if (result != SQLITE_OK) {
        printf("数据库打开失败: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    char* sql = "CREATE TABLE users ("
                "id INTEGER PRIMARY KEY,"
                "name TEXT NOT NULL,"
                "age INTEGER,"
                "email TEXT"
                ");";
    result = sqlite3_exec(db, sql, NULL, NULL, NULL);

    if (result != SQLITE_OK ) {
        printf("表格创建失败: %s\n", sqlite3_errmsg(db));
    } else {
        printf("表格创建成功!\n");
    }

    sqlite3_close(db);
    return 0;
}

在上面的示例中,我们使用了sqlite3_exec()函数来执行SQL CREATE TABLE语句,创建了一个名为'users'的表格,并定义了各列及其数据类型。注意,我们还设置了"id"列为主键,并为"name"列定义了NOT NULL属性。

插入数据

要向表格中插入数据,您需要使用SQL INSERT INTO语句。以下是使用C/C++代码向'users'表格插入一些示例数据的示例:

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

int main() {
    sqlite3* db;
    int result = sqlite3_open("example.db", &db);

    if (result != SQLITE_OK) {
        printf("数据库打开失败: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    char* sql = "INSERT INTO users (name, age, email) "
                "VALUES ('Tom', 20, 'tom@example.com'); "
                "INSERT INTO users (name, age, email) "
                "VALUES ('Jerry', 25, 'jerry@example.com'); ";
    result = sqlite3_exec(db, sql, NULL, NULL, NULL);

    if (result != SQLITE_OK ) {
        printf("数据插入失败: %s\n", sqlite3_errmsg(db));
    } else {
        printf("数据插入成功!\n");
    }

    sqlite3_close(db);
    return 0;
}

在上面的示例中,我们使用了sqlite3_exec()函数来执行SQL INSERT INTO语句,向'users'表格中插入了两个示例数据。请注意,我们将数据的值使用单引号括起来。

查询数据

要从表格中检索数据,您需要使用SQL SELECT语句。以下是使用C/C++代码从'users'表格检索数据的示例:

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

int callback(void* data, int argc, char** argv, char** column_names) {
    int i;
    printf("%-3s %-10s %-10s %-20s\n", "ID", "Name", "Age", "Email");

    for (i = 0; i < argc; i++) {
        printf("%-3s %-10s ", argv[i] ?  argv[i] : "NULL", column_names[i]);
    }

    printf("\n");

    return 0;
}

int main() {
    sqlite3* db;
    int result = sqlite3_open("example.db", &db);

    if (result != SQLITE_OK) {
        printf("数据库打开失败: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    char* sql = "SELECT * FROM users;";
    char* error_msg;
    result = sqlite3_exec(db, sql, callback, NULL, &error_msg);

    if (result != SQLITE_OK ) {
        printf("查询数据失败: %s\n", error_msg);
        sqlite3_free(error_msg);
    }

    sqlite3_close(db);
    return 0;
}

在上面的示例中,我们使用了sqlite3_exec()函数来执行SQL SELECT语句,并将检索到的数据作为回调函数的参数传递。请注意,我们使用了回调函数来输出数据,可以根据需要将其修改为您自己的代码。

更新数据

要更新表格中的数据,您需要使用SQL UPDATE语句。以下是使用C/C++代码更新'users'表格中"Tom"的年龄为22的示例:

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

int main() {
    sqlite3* db;
    int result = sqlite3_open("example.db", &db);

    if (result != SQLITE_OK) {
        printf("数据库打开失败: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    char* sql = "UPDATE users SET age=22 WHERE name='Tom';";
    char* error_msg;
    result = sqlite3_exec(db, sql, NULL, NULL, &error_msg);

    if (result != SQLITE_OK ) {
        printf("更新数据失败: %s\n", error_msg);
        sqlite3_free(error_msg);
    } else {
        printf("更新数据成功!\n");
    }

    sqlite3_close(db);
    return 0;
}

在上面的示例中,我们使用了sqlite3_exec()函数来执行SQL UPDATE语句,将"Tom"的年龄更新为22。请注意,我们使用了WHERE子句来指定要更新的数据行。

删除数据

要从表格中删除数据,您需要使用SQL DELETE语句。以下是使用C/C++代码从'users'表格中删除年龄大于等于25的记录的示例:

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

int main() {
    sqlite3* db;
    int result = sqlite3_open("example.db", &db);

    if (result != SQLITE_OK) {
        printf("数据库打开失败: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    char* sql = "DELETE FROM users WHERE age >= 25;";
    char* error_msg;
    result = sqlite3_exec(db, sql, NULL, NULL, &error_msg);

    if (result != SQLITE_OK ) {
        printf("删除数据失败: %s\n", error_msg);
        sqlite3_free(error_msg);
    } else {
        printf("删除数据成功!\n");
    }

    sqlite3_close(db);
    return 0;
}

在上面的示例中,我们使用了sqlite3_exec()函数来执行SQL DELETE语句,删除了年龄大于等于25的记录。请注意,我们使用了WHERE子句来指定要删除的数据行。

结论

在本文中,我们介绍了如何使用C/C++和SQLite的SQL语言来创建和管理SQLite数据库。我们了解了如何使用C/C++代码执行SQL查询和更新语句,并使用示例代码演示了各种操作的实现。虽然本文没有深入讨论SQLite的所有功能和API,但它足以为初学者提供一个良好的起点,让他们能够开始使用SQLite进行开发。