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 里:
- 放在当前项目的 build/ 目录(应用内部存储)
- 或通过 SAF 写入你有权限的外部目录(2026 版已支持 SAF)
如果你写 sqlite3_open("test.db", &db),文件会生成在程序运行时的工作目录下——通常是应用内部存储。
sqlite3 命令行工具
部分 Cxxdroid 版本还会附带 sqlite3 命令行工具。如果有,可以在 REPL 模式或 shell 里直接操作数据库。