Cxxdroid 中文文档 下载 App

SQLite 在 Cxxdroid 里读写数据库

SQLite 为什么适合移动端

SQLite 是 C 语言实现的单文件数据库——所有表和数据都存储在一个 .db 文件里,不需要数据库服务器,不需要配置。

Android 系统自带 SQLite(你的每个 App 都可以直接用),但 C++ 层面要用 SQLite 得自己链接库。Cxxdroid 的包管理器帮你把这一步做好了。

安装 SQLite

包管理器搜索「SQLite」或「sqlite3」,安装即可。

编译链接

CMake 项目里:

find_package(SQLite3 REQUIRED)
target_link_libraries(myexe PRIVATE SQLite::SQLite3)

如果 Cxxdroid 版本的预构建 SQLite 没有正确注册 CMake find_package,可以手动链接:

add_library(sqlite3 STATIC IMPORTED)
set_target_properties(sqlite3 PROPERTIES
    IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/libs/libsqlite3.a"
    INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/libs/sqlite"
)
target_link_libraries(myexe PRIVATE sqlite3)

上面的路径需要根据你实际的库文件位置调整。安装完 SQLite 后去项目目录或应用存储里找一下 libsqlite3.a 和头文件的位置。

一个完整示例

#include <sqlite3.h>
#include <iostream>

int main() {
    sqlite3 *db;
    int rc = sqlite3_open("test.db", &db);
    if (rc != SQLITE_OK) {
        std::cerr << "open failed: " << 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);";
    rc = sqlite3_exec(db, sql, nullptr, nullptr, nullptr);
    if (rc != SQLITE_OK) {
        std::cerr << "create failed: " << sqlite3_errmsg(db) << std::endl;
    }

    std::cout << "SQLite works!\n";
    sqlite3_close(db);
    return 0;
}

编译运行后,项目目录下会生成 test.db 文件。你可以用 Android 上任何 SQLite 查看器打开它,或者用 sqlite3 命令行工具查看。

注意:文件路径

SQLite 数据库文件路径在 Cxxdroid 里:

如果你写 sqlite3_open("test.db", &db),文件会生成在程序运行时的工作目录下——通常是应用内部存储。

sqlite3 命令行工具

部分 Cxxdroid 版本还会附带 sqlite3 命令行工具。如果有,可以在 REPL 模式或 shell 里直接操作数据库。