WCDB
中文版本请参看这里
WCDB 是一个 高效、完整、易于使用 的移动数据库框架,用于微信应用。它目前在 iOS、macOS 和 Android 上可用。
WCDB for iOS/macOS
特性
-
易于使用。通过 WCDB,您可以通过一行代码从数据库中获取对象。
-
WINQ(WCDB 集成查询语言):WINQ 是一种原生数据查询能力,可以免除开发者编写用于连接 SQL 查询字符串的粘合代码。
-
ORM(对象关系映射):WCDB 提供了一个灵活、易于使用的 ORM,用于创建表、索引和约束,并通过 Objective-C 对象进行 CRUD 操作。
[database getObjectsOfClass:WCTSampleConvenient.class fromTable:tableName where:WCTSampleConvenient.intValue>=10 limit:20];
-
-
高效。通过框架层和 sqlcipher 源代码优化,WCDB 具有更高的性能。
- 多线程并发:WCDB 支持通过连接池进行并发读-读和读-写访问。
- 批量写入性能测试。请参考以下图表以获取更多基准数据:[批量写入基准测试](https://raw.githubusercontent.com/wiki/Tencent/wcdb/assets/benchmark/baseline_batch_write.png)。
-
完整.
- 加密支持:WCDB 支持通过 SQLCipher 对数据库进行加密。
- 损坏恢复:WCDB 提供了一个内置的修复工具,用于数据库损坏恢复。
- 防止注入:WCDB 提供了内置的 SQL 注入防护。
入门指南
先决条件
- 使用WCDB的应用可以针对:iOS 7或更高版本,macOS 10.9或更高版本。
- 需要Xcode 8.0或更高版本。
- 需要Objective-C++。
安装
- 通过CocoaPods
- 安装CocoaPods。
- 运行
pod repo update
以便CocoaPods了解最新的WCDB版本。 - 在Podfile中,为您的应用target添加
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项目的构建阶段
设置中的链接的二进制和库
部分; - 在您应用程序targets的
构建阶段
设置选项卡上,点击 "+" 图标,选择新建运行脚本阶段
。创建一个运行脚本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的子模块。
教程
教程可以在这里找到:教程链接。
文档
对于 Android 的 WCDB
特性
- 通过 SQLCipher 加密数据库。
- 通过现代 Android 框架的连接池实现并发访问。
- 数据库损坏恢复的修复工具。
- 优化小型备份大小的数据库备份和恢复实用程序。
- 日志重定向和各种跟踪工具。
- 支持 API 12(Android 3.1)及以上。
入门
要将WCDB引入到您的项目中,请选择以下两种方式之一:通过Maven导入或通过AAR包导入。
通过Maven导入
要使用Maven仓库导入WCDB,请将以下行添加到您应用模块中的 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 Database APIs非常类似的接口。要将应用程序从AOSP API迁移,更改为从 android.database.*
到 com.tencent.wcdb.*
,并将 android.database.sqlite.*
更改为 com.tencent.wcdb.database.*
。更新导入路径后,应用程序将链接到WCDB而非AOSP API。
要打开或创建加密数据库,请使用带有-password版本的 SQLiteDatabase.openOrCreateDatabase()
、SQLiteOpenHelper.getWritableDatabase()
或 Context.openOrCreateDatabase()
。
注意:WCDB在SQLCipher Android绑定中用 byte[]
代替 String
作为密码。
String password = "MyPassword";
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("/path/to/database", password.getBytes(),
null, null);
请参阅 sample-encryptdb
样例,该样例展示了在纯文本和加密数据库之间传输数据的示例。
损坏恢复
请参阅 sample-repairdb
,了解如何使用 RepairKit
恢复损坏的数据库的说明。
重定向日志输出
默认情况下,WCDB 将其日志信息打印到系统日志中。您可能希望更改此行为,例如,为了保存日志以便进行故障排除。可以通过 Log.setLogger(LogCallback)
方法将WCDB的所有日志输出重定向到用户定义的例程。
从源码构建
使用预构建依赖关系构建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。如果您希望重新构建所有依赖项,可以将主机系统的编译器、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],并加入我们的 腾讯开源计划。