【发布时间】:2016-12-05 14:19:49
【问题描述】:
我已经解决了this问题和类似问题,但我仍然无法弄清楚。
之前我在我的安卓应用中使用SQLite。 预填充的 Sqlite 数据库的大小约为 15 MB。我制作了一个临时的 android 应用程序,将我的记录复制到一个新的 Realm 数据库中。这个新的 Realm 数据库的大小约为 150 MB。然后我用Mac中的Realm浏览器打开它并压缩它。大小现在减小到 15 MB。
但如果我在创建新数据库并将 sqlite 行复制到其中时使用加密,则大小约为 150 MB。当我使用十六进制密码打开它时,它可以正常打开。然后我像之前一样压缩它-> 大小恢复到正常的 15 MB。但是,我不知道为什么,现在加密被删除了。
为了解决这个问题,我只能想到一种解决方案。如果我可以对已经压缩的 Realm 数据库应用加密。但是,我想不通,如何在 Android 中做到这一点?
编辑 - 一些相关部分 -
第 1 部分 -
Realm.init(this);
byte[] key = new byte[64]; // Just for demonstration
RealmConfiguration config = new RealmConfiguration.Builder()
.name("QBank.realm")
.directory(getExternalFilesDir(null))
.encryptionKey(key)
.build();
Realm realm = Realm.getInstance(config);
第 2 部分 -
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button_sqlite2realm:
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
databaseAccess.open();
questionsList = databaseAccess.getAllQuestions();
databaseAccess.close();
Realm realm = Realm.getInstance(config);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
for (QuestionBank question : questionsList){
realm.copyToRealmOrUpdate(question);
}
}
});
break;
}
}
用于将加密数据库转换为压缩数据库 -> 我从 android 模拟器中提取了这个领域数据库 -> 在领域浏览器中打开它(使用十六进制密码) -> 压缩(但是这个新创建的压缩数据库现在没有加密)
附: - 我知道我的问题是描述性的,但我找不到这样做的方法。
【问题讨论】:
-
你要关闭你的领域数据库吗?如果可能,请分享您的代码以供复制?
-
对不起,我没有得到你。您的意思是从
sqlite复制到realm或从加密到压缩的代码? -
@PravinD,我已经用相关信息更新了我的问题。
-
你试过先压缩再加密吗?
-
您可以使用
writeEncryptedCopyTo编写您的 Realm 副本。该方法将使用新密钥进行加密并压缩领域。看看realm.io/docs/java/2.2.1/api/io/realm/…
标签: android database encryption realm realm-java