Создать базу данных из Zip-файла - Android - PullRequest
2 голосов
/ 30 апреля 2020

Мне нужно создать объект SQLiteDatabase из файла .db, который находится внутри файла .zip, и сохранить его в переменной БЕЗ извлечения файлов.

Файл .zip всегда будет иметь то же имя и всегда есть только 1 запись, а именно файл базы данных.

Когда я пытаюсь создать файл базы данных из файла .zip, он возвращает мне ZipEntry, который не может быть приведен к File, что что усложняет.

В качестве альтернативы, когда я пытаюсь скормить сам файл .zip openDatabase("path-to-zip", null, SQLiteDatabase.OPEN_READONLY)

, я получаю следующую ошибку:

файл зашифрован или это не база данных (код 26)

Я провел много исследований, но просто не могу найти решение где-либо. Кто-нибудь знает как это сделать? Ниже моя установка:

class DatabaseHelper(private val mContext: Context, factory: SQLiteDatabase.CursorFactory?) :
        SQLiteOpenHelper(mContext, DB_NAME, factory, 1) {

    private lateinit var mDatabase: SQLiteDatabase

    companion object {
        private val PATH: String = "../myZipFile.zip"
        private val DB_NAME = ZipFile(PATH).entries().nextElement().name
    }

    init {
        try {
            mDatabase = SQLiteDatabase.openDatabase(PATH, null, SQLiteDatabase.OPEN_READONLY)
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

}

1 Ответ

2 голосов
/ 30 апреля 2020

Мне нужно создать объект SQLiteDatabase из файла .db, который находится внутри файла .zip

Это невозможно, извините. SQLite требует наличия файла в файловой системе, а не записи в ZIP-файле. Либо распакуйте файл, либо не архивируйте его.

...