WCDB
中文版本请参看这里
WCDB 是一个高效、完整的、易于使用的移动数据库框架,用于微信应用。它基于 SQLite 和 SQLCipher,支持三种语言:C++、Swift 和 Objective-C。
特点
易于使用
- ORM(对象关系映射):WCDB 为创建表、索引和约束以及通过 C++/Swift/Objc 对象进行 CRUD 操作提供了灵活且易于使用的 ORM。
- WINQ(WCDB 集成查询语言):WINQ 是一种本地数据查询功能,它使开发者从编写连接 SQL 查询字符串的粘合代码中解放出来。
有了 ORM 和 WINQ,您可以通过一行代码在数据库中插入、更新、查询和删除对象。
// C++
database.insertObjects<Sample>(Sample(1, "text"), myTable);
database.updateRow("text2", WCDB_FIELD(Sample::content), myTable, WCDB_FIELD(Sample::id) == 1);
auto objects = database.getAllObjects<Sample>(myTable, WCDB_FIELD(Sample::id) > 0);
database.deleteObjects(myTable, WCDB_FIELD(Sample::id) == 1);
// Swift
try database.insert(Sample(id:1, content:"text"), intoTable: myTable)
try database.update(table: myTable,
on: Sample.Properties.content,
with: "text2"
where:Sample.Properties.id == 1)
let objects: [Sample] = try database.getObjects(fromTable: myTable,
where: Sample.Properties.id > 0)
try database.delete(fromTable: myTable where: Sample.Properties.id == 1)
// Objc
[database insertObject:sample intoTable:myTable];
[database updateTable:myTable
setProperty:Sample.content
toValue:@"text2"
where:Sample.id == 1];
NSArray* objects = [database getObjectsOfClass:Sample.class
fromTable:myTable
where:Sample.id > 0];
[database deleteFromTable:myTable where:Sample.id == 1];
高效
通过框架层和sqlcipher源优化,WCDB拥有了更高效的性能。
- 多线程并发:WCDB通过连接池支持并发读写访问。
- 深度优化:WCDB深入优化了SQLite的源代码和配置,以适应移动终端的开发场景。同时,WCDB也对常见的耗时场景进行了优化,例如批量写入数据。
完整
WCDB总结了实践中的常见问题,为数据库开发提供了更完整的发展体验。
- 加密支持:WCDB支持通过[SQLCipher][sqlcipher]进行数据库加密。
- 损坏恢复:WCDB提供内置的修复工具用于数据库损坏恢复。
- 防注入:WCDB提供内置的保护以防止SQL注入。
- 数据库模型升级:数据库模型与类定义绑定,以确保数据库字段的增加、删除和修改与类变量的定义一致。
- 全文搜索:WCDB提供易于使用的全文搜索接口,并包含多种语言的分词器。
- 数据迁移:WCDB支持通过简单的配置将数据从一个数据库迁移到另一个数据库。开发人员无需关心迁移的中间状态和进度。
兼容性
WCDB在三种语言中都有接口:C++、Swift和Objc。不同语言的接口采用相同的底层逻辑。WCDB的代码结构如图所示
在这种架构下,不同语言的WCDB可以拥有相同的接口结构和接口功能。在一个项目中,您可以使用一个WCDB用不同的语言编写数据库代码。不同语言的数据库逻辑不会冲突。一些全局接口,如错误监控,可以同时在不同语言的数据库逻辑上工作。
我们将在不久的将来添加更多对WCDB的语言支持,例如Java、Kotlin、Flutter,以便WCDB可以应用于更多平台。
构建与安装
以下维基包含了关于构建和安装WCDB的详细说明。
教程
以下可找到不同语言的教程。
贡献
如果您有兴趣贡献力量,请查看[CONTRIBUTING.md],也可加入我们的腾讯开源计划。