В Android Pie sqlite ведение журнала с опережающей записью (WAL) включено по умолчанию. Это вызывает ошибки для моего существующего кода только на устройствах Pie. Мне не удалось успешно отключить WAL с помощью SQLiteDatabase.disableWriteAheadLogging()
или PRAGMA journal_mode
из-за способа доступа к базе данных. Я хотел бы полностью отключить WAL с помощью параметра Android под названием db_compatibility_wal_supported:
Совместимость WAL (ведение журнала с опережающей записью) для приложений
Кто-нибудь знает, как это настроить? Я не знаю, можно ли изменить этот файл программно при запуске или его можно изменить вручную.
Дополнительные сведения о проблеме
У меня есть база данных sqlite (20 МБ+/250 тыс. записей) в моем приложении. Эта база данных создается с использованием простой Java на моем сервере. Он содержит базу данных продуктов питания, и пользователь приложения может добавлять в базу данных (и сервер обновляется). Это хранится в папке активов в android. Во время первой установки база данных копируется из ресурсов в папку приложения, чтобы в нее можно было записать, эффективно используя этот метод:
Копировать базу данных SQLite из папки с ресурсами
К сожалению, как только я начинаю писать в базу данных с помощью SqlDroid, wal включается, и таблицы, которые были в исходной базе данных, исчезают, и остаются только вновь созданные таблицы. Однако размер базы данных по-прежнему составляет 20 МБ+. Все ошибки базы данных связаны с отсутствующими таблицами. Метод копирования и записи таблицы отлично работает в версиях Android до Pie.
connection = new org.sqldroid.SQLDroidDriver().connect()
- person Rockvole   schedule 07.12.2018