C++与SQLite3联合打造实用的应用程序

SQLite是一个轻量级的嵌入式数据库引擎,在C++ 中使用SQLite需要包含SQLite的头文件并链接相应的库。以下是一个在C++ 中使用SQLite的基本示例:

一. 环境搭建

首先需要下载SQLite库。可以从SQLite官方网站(https://sqlite.org/download.html)下载预编译的二进制文件或者源代码。

在C++ 项目中,需要包含SQLite的头文件路径(如果是源代码安装,头文件通常在 sqlite - source - dir/include 目录下),并且链接SQLite库(如果是预编译二进制文件,在Windows下可能是 sqlite3.dll,在Linux下可能是 libsqlite3.so,在编译时需要指定库文件的路径和名称)。

二. 创建数据库和表

以下是一个简单的C++ 程序,用于创建一个SQLite数据库并在其中创建一个表:

#include <iostream>
#include <sqlite3.h>
int main() {
    sqlite3 *db;
    char *errMsg = 0;
    int rc = sqlite3_open("test.db", &db);
    if (rc!= SQLITE_OK) {
        std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
        sqlite3_close(db);
        return 1;
    }
    const char *sql = "CREATE TABLE IF NOT EXISTS users("
                            "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                            "name TEXT NOT NULL,"
                            "age INTEGER);";
    rc = sqlite3_exec(db, sql, 0, 0, &errMsg);
    if (rc!= SQLITE_OK) {
        std::cerr << "SQL error: " << errMsg << std::endl;
        sqlite3_free(errMsg);
        sqlite3_close(db);
        return 1;
    }
    sqlite3_close(db);
    return 0;
}

在这个示例中:

首先使用 sqlite3_open 函数打开(如果不存在则创建)一个名为 test.db 的数据库文件,并获取一个数据库连接对象 db。

然后定义一个SQL语句,用于创建一个名为 users 的表,表中包含 id(自增整数主键)、name(非空文本)和 age(整数)三个字段。

使用 sqlite3_exec 函数执行SQL语句,如果执行过程中出现错误,通过 errMsg 获取错误信息并输出。

最后使用 sqlite3_close 函数关闭数据库连接。

三. 插入数据

以下是一个向 users 表中插入数据的示例:

#include <iostream>
#include <sqlite3.h>
int main() {
    sqlite3 *db;
    char *errMsg = 0;
    int rc = sqlite3_open("test.db", &db);
    if (rc!= SQLITE_OK) {
        std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
        sqlite3_close(db);
        return 1;
    }
    const char *sql = "INSERT INTO users (name, age) VALUES ('John', 25);";
    rc = sqlite3_exec(db, sql, 0, 0, &errMsg);
    if (rc!= SQLITE_OK) {
        std::cerr << "SQL error: " << errMsg << std::endl;
        sqlite3_free(errMsg);
        sqlite3_close(db);
        return 1;
    }
    sqlite3_close(db);
    return 0;
}

这里定义了一个SQL插入语句,将名为 John,年龄为25的用户信息插入到 users 表中。

四. 查询数据

以下是一个查询 users 表中数据的示例:

#include <iostream>
#include <sqlite3.h>
static int callback(void *data, int argc, char argv, char azColName) {
    for (int i = 0; i < argc; i++) {
        std::cout << azColName[i] << " = " << argv[i]? argv[i] : "NULL" << std::endl;
    }
    std::cout << std::endl;
    return 0;
}
int main() {
    sqlite3 *db;
    char *errMsg = 0;
    int rc = sqlite3_open("test.db", &db);
    if (rc!= SQLITE_OK) {
        std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
        sqlite3_close(db);
        return 1;
    }
    const char *sql = "SELECT * FROM users;";
    rc = sqlite3_exec(db, sql, callback, 0, &errMsg);
    if (rc!= SQLITE_OK) {
        std::cerr << "SQL error: " << errMsg << std::endl;
        sqlite3_free(errMsg);
        sqlite3_close(db);
        return 1;
    }
    sqlite3_close(db);
    return 0;
}

在这个示例中:

定义了一个回调函数 callback,当查询到数据时,这个函数会被调用,用于处理每一行查询结果。

使用 sqlite3_exec 函数执行查询语句,将 callback 函数作为参数传递,这样查询到的每一行数据都会调用 callback 函数进行处理。

C++编程语言基础

C++与SQLite3联合打造实用的应用程序