SQLiteCpp 快速上手:5 分钟用现代 C++ 优雅操作 SQLite3 数据库
SQLiteCpp 快速上手5 分钟用现代 C 优雅操作 SQLite3 数据库【免费下载链接】SQLiteCppSQLiteC (SQLiteCpp) is a smart and easy to use C SQLite3 wrapper.项目地址: https://gitcode.com/gh_mirrors/sq/SQLiteCpp当你只是想在一个 C 程序里存点配置、记几笔账却被 SQLite 原生 C 接口的 prepare、bind、step、finalize 连环调用折磨时——SQLiteCpp 这个轻量级 C SQLite3 包装器就是为你准备的解药。它把底层繁琐的 C API 封装成几个直观的 C 类让你可以用写普通 C 的思维方式操作数据库。包装器wrapper通俗讲就是把难用的底层接口包上一层好用的壳你只管用壳不用碰里面那些细节。被 C API 折磨过的 C 开发者都懂这种感觉你大概经历过这样的场景数据库操作本来只是程序的一小部分却要写一堆sqlite3_prepare_v2、sqlite3_bind_int、sqlite3_step、sqlite3_finalize还要小心翼翼地判断每个返回值、手动释放每个指针。代码又长又容易出错一不留神就内存泄漏或者忘记检查错误。SQLiteCpp 想解决的正是这件事让 C 里的 SQLite 操作简单到像写一句普通代码。一句话SQLiteCpp 到底做什么SQLiteCpp 是一个基于 C11 的 SQLite3 包装库遵循 RAII资源获取即初始化设计——对象构造时自动打开连接析构时自动释放资源出错统一抛异常。你不需要关心底层指针的生命周期也不需要逐行检查错误码代码量通常能缩到原来的三分之一以下。哪些人适合用它C 桌面/嵌入式开发者需要本地存储又不想引入重量级数据库游戏与工具软件作者存档、配置、用户数据一个文件全搞定正在写课程设计/毕设的学生API 直观、文档齐全几分钟就能跑起来想给老项目加数据能力的维护者静态库接入几分钟完成集成三步完成安装与首次运行第一步拿到代码。克隆仓库即可无需额外初始化子模块也能编译核心库git clone https://gitcode.com/gh_mirrors/sq/SQLiteCpp第二步接入你的 CMake 项目。在 CMakeLists.txt 里加上几行把它当作子目录编译成静态库# 把 SQLiteCpp 加入构建 add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/thirdparty/SQLiteCpp) add_executable(your_app src/main.cpp) target_link_libraries(your_app SQLiteCpp # 包装库 sqlite3 # 底层 SQLite 库 pthread dl # Linux 下需要 )第三步写第一段代码。打开数据库、查询、取结果全部用熟悉的 C 风格完成#include SQLiteCpp/SQLiteCpp.h #include iostream try { // 打开数据库默认只读模式 SQLite::Database db(example.db3); // 编译一条带参数的查询语句 SQLite::Statement query(db, SELECT * FROM users WHERE age ?); query.bind(1, 18); // ? 是占位符这里绑定参数 18 // 逐行取结果 while (query.executeStep()) { std::cout query.getColumn(1).getText() 岁数 query.getColumn(2).getInt() std::endl; } } catch (const std::exception e) { std::cerr 数据库错误: e.what() std::endl; }跑起来了吗✅ 如果报undefined reference to sqlite3_xxx说明系统缺 SQLite 开发库安装libsqlite3-dev即可Debian/Ubuntu 系。实战小项目20 行代码写一个命令行记账本光看不练不过瘾我们把主要 API——建表、预处理插入、查询、事务——串起来做一个简单的记账 Demo。保存下面代码为ledger.cpp编译运行即可看到效果#include SQLiteCpp/SQLiteCpp.h #include iostream int main() { try { // 打开不存在则创建数据库 SQLite::Database db(ledger.db3, SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE); db.exec(CREATE TABLE IF NOT EXISTS bills (id INTEGER PRIMARY KEY, item TEXT, amount REAL)); // 预处理语句编译一次绑定参数防注入又高效 SQLite::Statement insert(db, INSERT INTO bills (item, amount) VALUES (?, ?)); insert.bind(1, 咖啡); // 绑定字符串 insert.bind(2, 25.5); // 绑定浮点数 insert.exec(); // 用事务批量再插入两条出错会自动回滚 { SQLite::Transaction transaction(db); SQLite::Statement batch(db, INSERT INTO bills (item, amount) VALUES (?, ?)); batch.bind(1, 地铁); batch.bind(2, 3.0); batch.exec(); batch.reset(); batch.bind(1, 午饭); batch.bind(2, 32.0); batch.exec(); transaction.commit(); // 全部成功才提交 } // 查询并打印所有账单 SQLite::Statement query(db, SELECT id, item, amount FROM bills); while (query.executeStep()) { std::cout query.getColumn(0).getInt() | query.getColumn(1).getText() | query.getColumn(2).getDouble() 元\n; } } catch (const std::exception e) { std::cerr 数据库错误: e.what() std::endl; } return 0; }这个 Demo 把 SQLiteCpp 的核心玩法都覆盖了Database负责连接、Statement负责参数化查询、Transaction保证数据要么全部写入、要么一点不动。试着改改金额、加个 WHERE 条件马上就能体会到这套 API 的手感。✨进阶能力速览能力一句话亮点预处理语句编译一次、重复绑定天然免疫 SQL 注入事务Transaction自动提交/回滚批量写入性能提升明显变参绑定SQLite::bindC14 起一行代码绑定全部参数告别逐个 bindBLOB 二进制读写图片、文件可以直接存进数据库再读出来内存数据库:memory:零文件起步测试与临时计算的好帮手数据库备份 Backup一个 API 完成整体备份与恢复自定义 SQL 函数把你的 C 函数注册成 SQL 函数直接在查询里调用加密接口 key/rekey配合加密版 SQLite落盘数据即加密版本信息getLibVersion()取运行库版本SQLite::VERSION取编译版本更详细的接口说明都在项目头文件里每个类和方法都带 Doxygen 注释查起来非常方便。新手最容易踩的 5 个坑1. 打开数据库时忘了加写权限⚠️ SQLiteCpp 默认以只读模式打开数据库。想建表、插入数据必须写成SQLite::Database db(test.db3, SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE);否则会抛出 unable to open database file 异常。2. 编译报 undefined reference to sqlite3_xxx说明没链接 SQLite 库。Debian/Ubuntu 系安装libsqlite3-dev或在 CMake 里开启项目自带的SQLITECPP_INTERNAL_SQLITE选项使用内置源码。3.execAndGet的结果要立刻拷贝它返回的是临时对象的引用必须当场赋值给变量例如std::string v db.execAndGet(...)否则下一条语句执行后数据就失效了。4. 一个数据库连接不能跨线程共用SQLiteCpp 支持 SQLite 的多线程模式多个线程可以各用各的连接但同一个Database对象不能同时在两个线程里操作。需要多线程就为每个线程开独立连接。5. 析构函数里报断言C 不允许在析构函数里抛异常所以 SQLiteCpp 在析构阶段用断言检查错误。如果不想触发默认的assert编译时定义SQLITECPP_ENABLE_ASSERT_HANDLER宏并自定义SQLite::assertion_failed处理函数即可。资源与下一步想深入探索可以看这几个地方官方 README 与构建说明README.md综合示例查询、事务、BLOB、内存库全演示examples/example1/main.cpp完整单元测试也是最好的 API 用法参考tests/版本变更记录CHANGELOG.mdSQLiteCpp 的核心理念就是简单而强大MIT 许可、零额外依赖、跨 Linux/Windows/macOS你几乎不需要学习成本就能上手。现在就去克隆一份用那 20 行记账本 Demo 跑通你的第一个 SQLiteCpp 程序——动手之后你会发现C 里操作数据库原来可以这么清爽。【免费下载链接】SQLiteCppSQLiteC (SQLiteCpp) is a smart and easy to use C SQLite3 wrapper.项目地址: https://gitcode.com/gh_mirrors/sq/SQLiteCpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考