SQLiteRepairKit 1.3.0

SQLiteRepairKit 1.3.0

RingoDqiuwenchen 维护。



  • sanhuazhang

WCDB

PRs Welcome Release Version WeChat Approved iOS WeChat Approved Android Platform

中文版本请参看这里

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的App可支持:iOS 7或更高版本、macOS 10.9或更高版本。
  • 需要Xcode 8.0或更高版本。
  • 需要Objective-C++。

安装

  • 通过CocoaPods
    1. 安装CocoaPods。
    2. 运行pod repo update以让CocoaPods了解最新的WCDB版本。
    3. 在Podfile中,为你的App目标添加pod 'WCDB'
    4. 从命令行运行pod install
    5. 使用CocoaPods生成的.xcworkspace文件来编辑你的项目。
    6. 在你的Objective-C++源文件顶部添加#import <WCDB/WCDB.h>并开始你的WCDB之旅。
    7. 由于WCDB是一个Objective-C++框架,对于你的项目中包含WCDB的文件,你应该将其扩展名从.m更改为.mm
  • 通过Carthage
    1. 安装Carthage
    2. github "Tencent/WCDB"添加到Cartfile。
    3. 运行carthage update
    4. WCDB.framework从适当平台的目录拖到Xcode项目设置中链接二进制和库部分。
    5. 在你的应用程序目标的构建阶段设置标签页上,点击"+"图标并选择新建Run Script阶段。创建一个Run Script包含carthage copy-frameworks并添加框架路径到输入文件$(SRCROOT)/Carthage/Build/iOS/WCDB.framework$(SRCROOT)/Carthage/Build/Mac/WCDB.framework
    6. 在你的Objective-C++源文件顶部添加#import <WCDB/WCDB.h>并开始你的WCDB之旅。
    7. 由于WCDB是一个Objective-C++框架,对于你的项目中包含WCDB的文件,你应该将其扩展名从.m更改为.mm
  • 通过动态框架:注意动态框架与iOS 7不兼容。有关iOS 7的支持,请参阅“静态框架”。
    1. 从git仓库获取源代码并更新sqlcipher子模块。
      • git clone https://github.com/Tencent/wcdb.git
      • cd wcdb
      • git submodule update --init sqlcipher
    2. WCDB.xcodeproj拖到你的项目中的wcdb/apple/
    3. WCDB.framework添加到Xcode项目通用设置中的嵌入的二进制部分。注意这里有两个框架,应该选择动态框架。你可以在构建阶段->目标依赖中检查它。正确的是WCDB,而`WCDB iOS Static`用于静态库。
    4. 在你的Objective-C++源文件顶部添加#import <WCDB/WCDB.h>并开始你的WCDB之旅。
    5. 由于WCDB是一个Objective-C++框架,对于你的项目中包含WCDB的文件,你应该将其扩展名从.m更改为.mm
  • 通过静态框架
    1. 从git仓库获取源代码并更新sqlcipher子模块。
      • git clone https://github.com/Tencent/wcdb.git
      • cd wcdb
      • git submodule update --init sqlcipher
    2. WCDB.xcodeproj拖到你的项目中的wcdb/apple/
    3. WCDB iOS Static添加到Xcode项目构建阶段设置中的目标依赖部分。
    4. WCDB.frameworklibz.tbd添加到Xcode项目设置中构建阶段链接的二进制和库部分。请注意,存在两个WCDB.framework,您应选择来自WCDB iOS静态目标的那个。
    5. -all_load-ObjC添加到Xcode项目设置中其他链接器标志部分。
    6. 在你的Objective-C++源文件顶部添加#import <WCDB/WCDB.h>并开始你的WCDB之旅。
    7. 由于WCDB是一个Objective-C++框架,对于你的项目中包含WCDB的文件,你应该将其扩展名从.m更改为.mm

教程

教程可以在这里找到。

文档

Android版WCDB

特性

  • 数据库加密通过SQLCipher实现。
  • 通过Android Architecture Components中的Room提供ORM/持久化解决方案。
  • 通过现代Android框架的连接池实现并发访问。
  • 数据库损坏恢复的修复工具。
  • 针对小型备份尺寸优化的数据库备份和恢复实用工具。
  • 日志重定向和各种追踪设施。
  • 支持API 14(Android 4.0)及以上版本。

入门

要将WCDB包含到项目中,可以选择以下任一方式:通过Maven导入或通过AAR包导入。

通过 Maven 导入

要将 WCDB 通过 Maven 仓库导入,请将以下行添加到您的应用模块中的 build.gradle 文件

dependencies {
    compile 'com.tencent.wcdb:wcdb-android:1.0.8'
    // Replace "1.0.8" to any available version.
}

这将在构建应用程序时导致 Gradle 从 JCenter 下载 AAR 包。

如果您想使用 Room 持久化库,则需要将 Google Maven 仓库添加到您的 根项目build.gradle 中。

allprojects {
    repositories {
        jcenter()
        google()    // Add this line
    }
}

同样,也要在模块 build.gradle 中添加依赖项。

dependencies {
    compile 'com.tencent.wcdb:room:1.0.8'
    // Replace "1.0.8" to any available version.

    annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
    // Don't forget to include Room annotation compiler from Google.
}

导入预构建的 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()

注意:WCDB 在 SQLCipher Android 绑定中使用 byte[] 而不是 String 作为密码。

String password = "MyPassword";
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("/path/to/database", password.getBytes(), 
        null, null);

sample-encryptdb,用于在纯文本和加密数据库之间传输数据的示例。

与 Room 一起使用 WCDB

要使用 Room 库与 WCDB 一起使用,请按照 Room 指令 进行操作。唯一需要更改的代码是在获取数据库实例时指定 WCDBOpenHelperFactory

SQLiteCipherSpec cipherSpec = new SQLiteCipherSpec()
        .setPageSize(4096)
        .setKDFIteration(64000);

WCDBOpenHelperFactory factory = new WCDBOpenHelperFactory()
        .passphrase("passphrase".getBytes())  // passphrase to the database, remove this line for plain-text
        .cipherSpec(cipherSpec)               // cipher to use, remove for default settings
        .writeAheadLoggingEnabled(true)       // enable WAL mode, remove if not needed
        .asyncCheckpointEnabled(true);        // enable asynchronous checkpoint, remove if not needed

AppDatabase db = Room.databaseBuilder(this, AppDatabase.class, "app-db")
                .allowMainThreadQueries()
                .openHelperFactory(factory)   // specify WCDBOpenHelperFactory when opening database
                .build();

sample-persistence,了解使用 Room 库和 WCDB 的示例。见 sample-room-with-a-view,了解使用 Room 库和 Google 的其他架构组件与 WCDB 一起使用的示例。

sample-room-with-a-view 来自Google的CodeLabs,经过少数几行的修改。搜索[WCDB]关键字以查找修改内容。

查看原始教程请点击此处

数据恢复

有关使用RepairKit恢复损坏数据库的说明,请参阅sample-repairdb

重定向日志输出

默认情况下,WCDB将其日志消息打印到系统日志。您可能希望更改此行为,例如,为了保存日志方便故障排除。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。如果您想重构所有依赖项,则需要主机系统上安装一个 trabajar 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],也可以加入我们的腾讯开源计划