Цель: обновить базу данных из данных XML
Процесс:
- Запустить транзакцию
- Удалить все существующие строки из таблиц
- По каждому основному элементу разбора XML вставить строку в основную таблицу и получить PK
- Для каждого дочернего элемента основного элемента вставить запись во вторую таблицу, предоставляющую FK с предыдущего шага
- Зафиксировать транзакцию
Довольно стандартный материал для операций db. Проблема заключается в том, что операции CRUD не выполняются в ContentProvider
, а используются ContentResolver
, поэтому вставка, например, выглядит как resolver.insert(CONTENT_URI, contentValues)
. API ContentResolver не имеет ничего похожего на транзакцию, и я не могу использовать bulkInsert
, так как я вставляю в 2 таблицы с перерывами (плюс я хочу иметь delete
внутри транзакции).
Я подумывал зарегистрировать свой настроенный ContentProvider
как прослушиватель, используя registerContentObserver
, но поскольку методы ContentResolver#acquireProvider
скрыты, как я могу получить правильную ссылку?
Мне повезло?