中文版本请参看这里
WCDB is an efficient, complete, easy-to-use mobile database framework used in the WeChat application. It's currently available on iOS, macOS and Android.
- WINQ (WCDB language integrated query): WINQ is a native data querying capability which frees developers from writing glue code to concatenate SQL query strings.
- ORM (Object Relational Mapping): WCDB provides a flexible, easy-to-use ORM for creating tables, indices and constraints, as well as CRUD through ObjC objects.
- Multi-threaded concurrency: WCDB supports concurrent read-read and read-write access via connection pooling.
- Encryption Support: WCDB supports database encryption via SQLCipher.
- Corruption recovery: WCDB provides a built-in repair kit for database corruption recovery.
- Anti-injection: WCDB provides a built-in protection from SQL injection.
- Apps using WCDB can target: iOS 8 or later, macOS 10.10 or later.
- Xcode 8.0 or later required.
- Objective-C++ required.
- Via Carthage:
- Install Carthage;
- Add
github "Tencent/WCDB"to your Cartfile; - Run
carthage update. - Drag
WCDB.frameworkfrom the appropriate platform directory inCarthage/Build/to theLinked Binary and Librariessection of your Xcode project’sBuild Phasessettings; - On your application targets'
Build Phasessettings tab, click the "+" icon and chooseNew Run Script Phase. Create a Run Script withcarthage copy-frameworksand add the paths to the frameworks under "Input Files":$(SRCROOT)/Carthage/Build/iOS/WCDB.frameworkor$(SRCROOT)/Carthage/Build/Mac/WCDB.framework;
- Via source code:
- Getting source code from git repository. If cloning from git, submodules are required:
git submodule update --init --recursive. - Drag
WCDB.xcodeprojinwcdb/apple/into your project; - Add
WCDB.frameworkto theTarget Dependenciessection andLinked Binary and Librariesof your Xcode project's `Build Phases" settings; - Add
WCDB.frameworkto the "Enbedded Binaries" section of your Xcode project's "General" settings;
- Getting source code from git repository. If cloning from git, submodules are required:
Add #import <WCDB/WCDB.h> at the top of your Objective-C++ source files and start your WCDB journey.
Note that
- Since WCDB is an Objective-C++ framework, for those files in your project that includes WCDB, you should rename their extension .m to .mm
- Abot Cocoapods - WCDB links SQLCipher with each source files separately, but not a large sqlite.c file. It will be. This will be easier to debug, but the cocoapods configuration will be more complex. We will finish it as soon as possible.
Tutorials can be found here.
- Database encryption via SQLCipher.
- Concurrent access via connection pooling from modern Android framework.
- Repair toolkit for database corruption recovery.
- Database backup and recovery utility optimized for small backup size.
- Log redirection and various tracing facilities.
To include WCDB to your project, choose either way: import via Maven or via AAR package.
To import WCDB via Maven repositories, add the following lines to build.gradle on your
app module:
dependencies {
compile 'com.tencent.wcdb:wcdb-android:1.0.0'
// Replace "1.0.0" to any available version.
}This will cause Gradle to download AAR package from jcenter while building your application.
1. Download AAR package from release page.
2. Import the AAR as new module. In Android Studio, select File -> New -> New Module... menu and choose "Import JAR/AAR Package".
3. Add a dependency on the new module. This can be done using File -> Project Structure... in Android Studio, or by adding following code to application's build.gradle:
dependencies {
// Change "wcdb" to the actual module name specified in step 2.
compile project(':wcdb')
}WCDB has interfaces very similar to Android SQLite Database APIs. To migrate you application from
AOSP API, change import path from android.database.* to com.tencent.wcdb.*, and
android.database.sqlite.* to com.tencent.wcdb.database.*. After import path update,
your application links to WCDB instead of AOSP API.
To open or create an encrypted database, use with-password versions of
SQLiteDatabase.openOrCreateDatabase(), SQLiteOpenHelper.getWritableDatabase(),
or Context.openOrCreateDatabase().
Note: WCDB uses byte[] for password instead of String in SQLCipher Android Binding.
String password = "MyPassword";
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("/path/to/database", password.getBytes(),
null, null);See sample-encryptdb for sample for transferring data between plain-text and encrypted
databases.
See sample-repairdb for instructions how to recover corrupted databases using RepairKit.
By default, WCDB prints its log message to system logcat. You may want to change this
behavior in order to, for example, save logs for troubleshooting. WCDB can redirect
all of its log outputs to user-defined routine using Log.setLogger(LogCallback)
method.
WCDB itself can be built apart from its dependencies using Gradle or Android Studio.
To build WCDB Android library, run Gradle on android directory:
$ cd android
$ ./gradlew buildBuilding WCDB requires Android NDK installed. If Gradle failed to find your SDK and/or
NDK, you may need to create a file named local.properties on the android directory
with content:
sdk.dir=path/to/sdk
ndk.dir=path/to/ndk
Android Studio will do this for you when the project is imported.
WCDB depends on OpenSSL crypto library and SQLCipher. You can rebuild all dependencies if you wish. In this case, a working C compiler on the host system, Perl 5, Tcl and a bash environment is needed to be installed on your system.
To build dependencies, checkout all submodules, set ANDROID_NDK_ROOT environment
variable to your NDK path, then run build-depends-android.sh:
$ export ANDROID_NDK_ROOT=/path/to/ndk
$ ./build-depends-android.shThis will build OpenSSL crypto library and generate SQLCipher amalgamation sources and place them to proper locations suitable for WCDB library building.