В моем приложении для Android есть база данных SQLite и поставщик контента. Этот контент-провайдер зарегистрирован в приложении AndroidManifest.xml
. Он не экспортируется, поэтому только мое приложение может его увидеть.Повторно создать базу данных при использовании контент-провайдеров
Как часть сброса профиля пользователя, я хочу полностью стереть эту базу данных и воссоздать ее с нуля. Сначала я попытался позвонить deleteDatabase()
из контекста активности. Это работает, но только если приложение закрыто и снова открывается. В противном случае он сработает, когда я попытаюсь вставить строки, говорящие, что база данных доступна только для чтения. Мое понимание заключается в том, что соединение необходимо закрыть перед тем, как позвонить deleteDatabase()
. Тем не менее, подключение управляется Поставщиком контента и не должно быть закрыто вручную, насколько я понимаю.
В качестве альтернативы, я использую метод call()
из ContentResolver
, чтобы вызвать пользовательскую функцию, которая удалит все данные в таблицах и сбросит количество последовательностей вручную.
Это работает, но теперь я должен удалить данные из каждой таблицы вручную и должен будет отслеживать любые изменения, которые я делаю в будущем.
Есть ли лучший способ удалить всю базу данных и иметь onCreate()
моего DatabaseHelper
(SQLiteOpenHelper
) триггера при использовании ContentProvider
?
Почему вы хотите воссоздать, а не просто удалить весь контент? –
@DiegoTorresMilano Я полагаю, что я просто пытаюсь быстро обновить базу данных до нового состояния, не отбросив каждую таблицу/строку (следовательно, пытаясь вызвать deleteDatabase), и пусть первоначальный процесс настройки изменит конфигурацию нового профиля так, как это было бы на первом запустить. В настоящее время я удаляю все строки данных, мне просто интересно, если бы что-то было близко к вызову deleteDatabase, который бы сработал. – Programmer001
Не пытайтесь удалить файл, пока он еще открыт. –