WCDB
中文版本请参看这里
WCDB 是一个 高效、完整、易于使用 的移动数据库框架,用于微信应用中。它目前在 iOS、macOS 和 Android 上可用。
WCDB for iOS/macOS
功能
-
易于使用。通过 WCDB,您可以通过一行代码从数据库获取对象。
-
WINQ (WCDB 语言集成查询):WINQ 是一种原生数据查询能力,可让开发者摆脱编写连接 SQL 查询字符串的粘合代码。
-
ORM (对象关系映射):WCDB 提供了一个灵活、易于使用的 ORM,用于创建表、索引和约束,以及通过 ObjC 对象进行 CRUD。
[database getObjectsOfClass:WCTSampleConvenient.class fromTable:tableName where:WCTSampleConvenient.intValue>=10 limit:20];
-
-
高效。通过框架层和 sqlcipher 源优化,WCDB 具有更好的性能。
- 多线程并发:WCDB 支持通过连接池进行并发读-读和读-写访问。
- 批量写入性能测试。
更多基准数据,请参阅 我们的基准。
-
完整.
- 加密支持:WCDB 通过 SQLCipher 支持数据库加密。
- 损坏恢复:WCDB 提供内置的修复工具,用于数据库损坏恢复。
- 防注入:WCDB 提供内置的 SQL 注入防护。
入门
先决条件
- 使用 WCDB 的应用程序可以针对:iOS 7 或更高版本,macOS 10.9 或更高版本。
- 需要 Xcode 8.0 或更高版本。
- 需要 Objective-C++。
安装
- 通过 Cocoapods
- 安装 CocoaPods。
- 运行
pod repo update
以让 Cocoapods 了解最新的 WCDB 版本。 - 在你的 Podfile 中,添加
pod 'WCDB'
到你的应用目标。 - 从命令行运行
pod install
。 - 使用 CocoaPods 生成的
.xcworkspace
文件来处理你的项目! - 在你的 Objective-C++ 源文件顶部添加
#import <WCDB/WCDB.h>
并开始你的 WCDB 之旅。 - **由于 WCDB 是一个 Objective-C++ 框架,所以对于你的项目中包含 WCDB 的文件,你应该将它们的扩展名
.m
重命名为.mm
。
- 通过 Carthage
- 安装 Carthage;
- 将
github "Tencent/WCDB"
添加到你的 Cartfile; - 运行
carthage update
。 - 将
WCDB.framework
拖动到Carthage/Build/
中恰当的平台目录,并将其拖到 Xcode 项目设置的链接的二进制和库
部分; - 在你的应用目标的
构建阶段
设置标签页中,单击加号图标并选择新运行脚本阶段
。创建一个具有carthage copy-frameworks
的运行脚本,并将框架的路径添加到输入文件
:$(SRCROOT)/Carthage/Build/iOS/WCDB.framework
或$(SRCROOT)/Carthage/Build/Mac/WCDB.framework
; - 在你的 Objective-C++ 源文件顶部添加
#import <WCDB/WCDB.h>
并开始你的 WCDB 之旅。 - 由于 WCDB 是一个 Objective-C++ 框架,所以对于你的项目中包含 WCDB 的文件,你应该将它们的扩展名
.m
重命名为.mm
。
- 通过动态框架:请注意,动态框架与 iOS 7 不兼容。有关 iOS 7 的支持,请参阅“静态框架”。
- 从 git 仓库获取源代码并更新 sqlcipher 的子模块。
git clone https://github.com/Tencent/wcdb.git
cd wcdb
git submodule update --init sqlcipher
- 将
WCDB.xcodeproj
从wcdb/apple/
拖放到你的项目中; - 将
WCDB.framework
添加到 Xcode 项目“通用设置”中的嵌入的二进制文件
部分;注意这里有两个框架,应该选择动态框架。您可以在“构建阶段”->“目标依赖”中查看它。正确的选择是WCDB
,而`WCDB iOS Static` 用于静态库。 - 在你的 Objective-C++ 源文件顶部添加
#import <WCDB/WCDB.h>
并开始你的 WCDB 之旅。 - 由于 WCDB 是一个 Objective-C++ 框架,所以对于你的项目中包含 WCDB 的文件,你应该将它们的扩展名
.m
重命名为.mm
。
- 从 git 仓库获取源代码并更新 sqlcipher 的子模块。
- 通过静态框架
- 从 git 仓库获取源代码并更新 sqlcipher 的子模块。
git clone https://github.com/Tencent/wcdb.git
cd wcdb
git submodule update --init sqlcipher
- 将
WCDB.xcodeproj
从wcdb/apple/
拖放到你的项目中; - 将
WCDB iOS Static
添加到 Xcode 项目“构建阶段”设置的目标依赖
部分; - 将
WCDB.framework
,libz.tbd
添加到 Xcode 项目“构建阶段”设置的链接的二进制和库
部分;注意这里有多个WCDB.framework
,您应该选择来自WCDB iOS Static
目标的那个。 - 将
-all_load
和-ObjC
添加到 Xcode 项目“构建设置”的其他链接器标志
部分。 - 在你的 Objective-C++ 源文件顶部添加
#import <WCDB/WCDB.h>
并开始你的 WCDB 之旅。 - 由于 WCDB 是一个 Objective-C++ 框架,所以对于你的项目中包含 WCDB 的文件,你应该将它们的扩展名
.m
重命名为.mm
。
- 从 git 仓库获取源代码并更新 sqlcipher 的子模块。
教程
教程可以在 这里找到。
文档
WCDB for Android
功能
- 通过 SQLCipher 进行数据库加密。
- 通过现代 Android 框架的连接池实现并发访问。
- 数据库损坏恢复工具。
- 针对小型备份大小的数据库备份和恢复实用程序。
- 日志重定向和各种跟踪设施。
- 支持 API 12(Android 3.1)及以上版本。
入门
要将WCDB添加到您的项目,可以选择以下任一方式:通过Maven导入或通过AAR包导入。
通过Maven导入
要通过Maven仓库导入WCDB,请在您的app模块的build.gradle
中添加以下几行。
dependencies {
compile 'com.tencent.wcdb:wcdb-android:1.0.5'
// Replace "1.0.2" to any available version.
}
这会导致Gradle在构建应用程序时从jcenter下载AAR包。
导入预构建的AAR包
1. 从发布页面下载AAR包。 2. 将AAR作为新模块导入。 在Android Studio中,选择文件 -> 新建 -> 新模块...
菜单,并选择"导入JAR/AAR包"
。 3. 在新的模块上添加依赖。 这可以通过Android Studio中的文件 -> 项目结构...
完成,或者通过将以下代码添加到应用的build.gradle
中来实现。
dependencies {
// Change "wcdb" to the actual module name specified in step 2.
compile project(':wcdb')
}
从纯文本文档的SQLite数据库迁移
WCDB提供了与Android SQLite数据库API非常相似的接口。为了从AOSP API迁移您的应用程序,更改导入路径从android.database.*
到com.tencent.wcdb.*
,并将android.database.sqlite.*
更改为com.tencent.wcdb.database.*
。更新导入路径后,您的应用程序将链接到WCDB而不是AOSP API。
要打开或创建一个加密数据库,请使用带有-password版本的方法SQLiteDatabase.openOrCreateDatabase()
、SQLiteOpenHelper.getWritableDatabase()
或Context.openOrCreateDatabase()
。
注意:在SQLCipher Android绑定中,WCDB使用byte[]
而不是String
作为密码。
String password = "MyPassword";
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("/path/to/database", password.getBytes(),
null, null);
有关在纯文本文档的数据库和加密数据库之间传输数据的示例,请参阅sample-encryptdb
。
损坏恢复
请参阅sample-repairdb
获取使用RepairKit
恢复损坏数据库的说明。
重定向日志输出
默认情况下,WCDB 将其日志消息打印到系统日志cat。您可能需要更改此行为,例如,保留日志以用于故障排除。WCDB 可以通过使用 Log.setLogger(LogCallback)
方法将其所有日志输出重定向到用户定义的例程。
从源构建
使用预构建依赖项构建 WCDB Android
WCDB 本身可以与依赖项分离构建,使用 Gradle 或 Android Studio。要构建 WCDB Android 库,在 android
目录中运行 Gradle。
$ cd android
$ ./gradlew build
构建 WCDB 需要 Android NDK。如果 Gradle 无法找到您的 SDK 和/或 NDK,您可能需要在 android
目录中创建一个名为 local.properties
的文件,其内容如下:
sdk.dir=path/to/sdk
ndk.dir=path/to/ndk
在将项目导入后,Android Studio 将为您完成此操作。
从源构建依赖项
WCDB 依赖于 OpenSSL 加密库和 SQLCipher。如果您愿意,您可以重新构建所有依赖项。在这种情况下,需要在系统上安装支持 C 编译器、Perl 5、Tcl 和 bash 环境的宿主机。
要构建依赖项,检出所有子模块,设置环境变量 ANDROID_NDK_ROOT
为您的 NDK 路径,然后运行 build-depends-android.sh
$ export ANDROID_NDK_ROOT=/path/to/ndk
$ ./build-depends-android.sh
这将构建 OpenSSL 加密库,生成 SQLCipher 混合源,并将它们放置到适合 WCDB 库构建的适当位置。
文档
贡献
如果您有兴趣参与贡献,请查看[CONTRIBUTING.md],并加入我们的腾讯开源计划。