WCDB
中文版本请参看这里
WCDB 是一个 高效、完整、易用 的移动数据库框架,用于微信应用。目前它可在 iOS、macOS 和 Android 上使用。
WCDB for iOS/macOS
特性
-
易用。通过 WCDB,您可以一行代码从数据库中获取对象。
-
WINQ(WCDB 集成查询语言):WINQ 是一个本地数据查询功能,它让开发者无需编写粘合代码来连接 SQL 查询字符串。
-
ORM(对象关系映射):WCDB 为创建表、索引和约束以及通过 ObjC 对象进行 CRUD 提供了一个灵活、易用的 ORM。
[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 项目的链接二进制和库
部分的Build Phases
设置; - 在您的应用程序目标的
Build Phases
设置选项卡中,点击 "+" 图标并选择新建 Run Script Phase
。创建一个包含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 项目的General settings
的Embeded Binaries
部分的General settings
;**请注意,这里有两组框架,应该选择动态框架。您可以在Build Phases
->Target Dependencies
中查看。正确的是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 项目Build Phases
设置的Target Dependencies
部分; - 将
WCDB.framework
和libz.tbd
添加到你的 Xcode 项目的Build Phases
设置中的Linked Binary and Libraries
部分;注意有两个WCDB.framework
,你应该选择来自WCDB iOS Static
目标的那一个。 - 将
-all_load
和-ObjC
添加到你的 Xcode 项目的Build Settings
中的Other Linker Flags
部分。 - 在 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,请将以下行添加到应用模块的 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],也可以加入我们的腾讯开源计划。