Ваша проблема связана с тем, что DBHelper.getReadableDatabase();
используется перед копированием.
Это используется (неправильное использование будет более подходящим) для создания базы данных папки / директойра в данных/ data / the_package / folder / directory.
- неправильно использовать, поскольку создавать каталог просто излишне.
В результате происходит открытие базы данных, а в случаеAndroid 9+ приводит к двум дополнительным файлам, файлы -wal и -shm, создаваемые как Android 9+, по умолчанию используют ведение журнала записи.
Когда файл базы данных копируется поверх вновь созданного файла, два другихфайлы остаются.Когда база данных открывается после копирования, два файла не соответствуют скопированной базе данных, и открытие завершается неудачно, но захватывается, что приводит к созданию новой базы данных.
Существует несколько способов обойти это.
База данных может быть открыта путем принудительного использования режима журнала, например, путем перезаписи метода onConfigure для вызова enableWriteAheadLogging (false) .
Удалите -wal и -shm перед копией файлов.
- НЕ РЕКОМЕНДУЕТСЯ, поскольку накладные расходы на ненужное открытие и удаление созданных файлов все еще присутствуют.
Создайте папку database вместо вызова getReadableDatabase()
- , хотя это рекомендуется как таковое.При использовании
checkDB = SQLiteDatabase.openDatabase(myPath, null,SQLiteDatabase.OPEN_READONLY);
все еще существуют ненужные накладные расходы, чтобы проверить, существует ли файл базы данных.
Проверьте наличие базы данных как File и, еслиего не существует, используйте метод File mkdirs для создания каталога баз данных (из любых каталогов, которые потребуются при изменении этого каталога).
- Это рекомендуемый способ.
Этот ответ предоставляет код (см. checkDataBase метод), который выполняет последний, отмечая, что вы должны дополнительно удалить строкуDBHelper.getReadableDatabase();
.