agrosner / agrosner/DBFlow

UndeliverableException: android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database

オープン
#1,722 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Kotlin
スター
4.8k
フォーク
593
平均マージ
1分
マージ済み PR(30日)
1

説明

DBFlow Version: 4.2.4

Bug or Feature Request: Bug

Description:

I am using DBFlow with SQLCipher. I am trying to encrypt the already existing SQLite Database(using DBFlow) with SQLCipher in Android.

I used the following code to encrypt the DB:

private void encryptDB() {
String password = "test123";
String LEGACY_DATABASE_NAME = "legacy.db";
String NEW_DATABASE_NAME = "new_crypt.db";
File newDBFile = getDatabasePath(NEW_DATABASE_NAME);
File legacyFile = getDatabasePath(LEGACY_DATABASE_NAME);
if (!newDBFile.exists() && legacyFile.exists()) {
SQLiteDatabase.loadLibs(this);
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(legacyFile, "", null);
db.rawExecSQL(String.format("ATTACH DATABASE '%s' AS encrypted KEY '%s';", newDBFile.getAbsolutePath(), password));
db.rawExecSQL("SELECT sqlcipher_export('encrypted')");
db.rawExecSQL("DETACH DATABASE encrypted;");
// db = SQLiteDatabase.openOrCreateDatabase(newDBFile, password, null);
db = SQLiteDatabase.openDatabase(newDBFile.getAbsolutePath(), password, null,
SQLiteDatabase.OPEN_READWRITE);
legacyFile.delete();
newDBFile.renameTo(legacyFile);
boolean open = db.isOpen();
Log.d("isOpen", ""+ open); // this is getting as true
}
}

The DB is encrypted fine but when I am trying to write any operations then getting the following exception:

> io.reactivex.exceptions.UndeliverableException: android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (code 1032 SQLITE_READONLY_DBMOVED[1032])

I found a similar post here https://stackoverflow.com/q/36070088/2462531 but not found any solution to it.

Also, I found this https://stackoverflow.com/questions/37939513/sqlcipher-along-with-dbflow/41812230#41812230 to encrypt the DBFlow database with SQLCipher and implemented it. Then it is working if I install it as a fresh app but when I install this app on top of the old app which is having not encrypted DB then it is failing.

> net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master;

Please suggest how can I fix this?

See my question in SOF here:
https://stackoverflow.com/q/67226149/2462531

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。