Skip to content
qiuwenchen edited this page Jun 7, 2023 · 47 revisions

WCDB 是一个易用、高效、完整的移动数据库框架,它基于 SQLite 和 SQLCipher 开发,在微信中应用广泛,且支持在 C++、Swift、Objc 三种语言环境中使用。

易用性

One line of code 是 WCDB 设计的基本原则之一。通过更现代的数据库开发模式,减少开发者所需使用的代码量,绝大部分增删查改都只需一行代码即可完成:

// C++
WCDB::OptionalValueArray<Sample> objects = database.getAllObjects<Sample>(myTable, WCDB_FIELD(Sample::identifier) > 10);
// Swift
let objects: [Sample] = try database.getObjects(fromTable: myTable, 
                                                where: Sample.Properties.identifier > 10)
// Objc
NSArray<Sample*>* objects = [database getObjectsOfClass:Sample.class fromTable:myTable where:Sample.identifier > 10];
  1. 模型绑定。基于C++、Swift、Objc 的语法特性,使用声明式语句建立 C++、Swift、Objc 类型与数据库表之间的映射关系,从而使得开发者可以通过类对象直接操作数据库。
  2. 范型与类型推导。WCDB 的接口与 C++、Swift、Objc 的语法相结合,使复杂的数据库操作可以以简明的方式表达出来。因此,代码不仅易于编写,而且更易于阅读和维护。
  3. 语言集成查询。深度结合 C++、Swift、Objc 和 SQL 的语法,使得纯字符串的 SQL 可以以代码的形式表达出来。结合代码提示及纠错,极大地提高了开发效率。

高效性

WCDB 基于 SQLite,并深入其源码进行了性能优化,以适配移动终端的场景。同时,对于常用且性能消耗较大的场景,如批量插入等,也做了针对性的优化。 在多线程方面,WCDB 不仅可以安全地在任意线程进行数据库操作,且其内部会智能地根据操作类型调配资源,使其能够并发执行,进一步提升效率。

完整性

WCDB 总结实践中常见的问题,为数据库开发提供更完整、全面的使用体验:

  1. 加密。基于 SQLCipher 的加密机制,为数据安全提供保障。
  2. 全文搜索。WCDB 提供简单易用的全文搜索接口,并包含适配多种语言的分词器,使得数据搜索更精准。
  3. 反注入。内建在语言集成查询中的反注入机制,可以避免第三方从输入框注入 SQL,进行预期之外的恶意操作。
  4. 字段升级。数据库模型与类定义绑定,使得字段的增加、删除、修改都与类变量的定义保持一致,不需要开发者额外地管理字段的版本。
  5. 损坏修复。修复工具可以在系统错误、磁盘故障等情况下,尽最大限度地将损坏的数据找回并导出。
  6. 数据迁移。WCDB 支持通过简单的配置将数据表迁移到其他数据库,而且让开发者可以以迁移已经完成为假定前提 进行开发,无需关心迁移的中间状态和进度。

兼容性

WCDB 支持 C++、Swift、Objc 三种语言进行开发,但是这三种语言在底层是共享同一套逻辑的,整体架构如下图所示:

在这个架构下,不同语言版本的WCDB可以拥有同样的接口结构和接口能力,开发者在一个项目中只要用一个WCDB就可以满足不同语言的开发需求,不同语言的数据库逻辑不会产生冲突。一些如错误监听之类的全局接口,可以做到一处配置,同时作用于不同语言的数据库,可以节省代码,统一数据库管理逻辑。

接下来我们会给WCDB添加更多语言的接口,比如 JavaKotlinFlutter,让 WCDB 可以应用到更多平台,提高跨平台能力。

安装与使用

WCDB 的安装和使用教程请看右侧导航栏,查看你需要使用的开发语言的文档。

Clone this wiki locally