WCDB 是腾讯出品的一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android,还内建了Repair Kit用于修复损坏的数据库以及内置的防SQL注入。
使用方法:
dependencies {
compile 'com.tencent.wcdb:wcdb-android:1.0.2'
// Replace "1.0.2" to any available version.
}
和在 android 上使用 SQLite 一样,先创建一个 WcdbHelper 继承 SQLiteOpenHelper 类,注意包名这里是 com.tencent.wcdb.database 。
class WcdbHelper extends SQLiteOpenHelper{
public WcdbHelper(Context context, String name, byte[] password, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
super(context, name, password, factory, version, errorHandler);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
由于 wcdb 是基于 SQLCipher,所以我们可以为数据库设置一个密码,我们在构造函数里指定密码即可,wcdb 允许 byte[] 作为密码, SQLCipher 使用 String 作为密码。
File cdb = new File(getExternalFilesDir("db"), "hello.wcdb");
WcdbHelper wcdbHelper = new WcdbHelper(
getApplicationContext(),
cdb.getAbsolutePath(),
"password".getBytes(), null, 1, null
);
接下来在这张表里创建一条数据:
String sql = "INSERT INTO \"main\".\"address_book\" (\"name\", \"age\", \"address\") VALUES (?, ?, ?)";
wcdbHelper.getWritableDatabase().execSQL(sql, new String[]{"dummy", "28", "Hubei wuhan"});
这样,在 hello.wcdb 这个数据库中就存在了一条数据,当我们像打开 sqlite 数据库时打开这个 wcdb 数据库时候,提示错误,这是正常的,因为它被加密了,这样无论手机是否 root 或是我们把数据库存放在外置存储中,对于我们 app 的敏感数据来说,他们依然是安全的。
总得来说,如果会使用 sqlite 的话,那么 wcdb 也不在话下,并且迁移成本也很小。唯一的不足是,wcdb 官方提到的 winq 查询在 android 上并不支持,但是官方也说在今后会提供其他方式的 orm 以方便数据库操作。
对于习惯了像 .NET 上的 EF 框架的人来说说,在 app 或程序中继续写 sql 语句让我回到了刀耕火种的时代,在 wcdb 之前我接触到的另一个数据库是 .NET 平台上的 LiteDB,虽然它不出名,但是不用让我写 sql ,虽然它本就是 NoSQL 数据库 ,哈!