Android SQLite - обновлять таблицу, только если она другая - PullRequest
2 голосов
/ 25 августа 2011

В настоящее время я успешно использую базу данных SQLite, которая заполнена данными из Интернета. Я создаю массив значений и добавляю их как строку в базу данных.

В настоящее время для обновления базы данных при запуске операции я очищаю базу данных и снова заполняю ее, используя данные из Интернета.

Есть ли простой способ сделать одно из следующего?

A: Обновлять строку в таблице только в том случае, если данные изменились (я не уверен, как мне это сделать, если не было согласованного первичного ключа - что произойдет, если новая строка будет добавлена ​​с измененными данными, однако не было бы способа узнать, какие из старых строк удалить)

B: получить все строки данных из Интернета, затем очистить и заполнить базу данных за один раз, а не после получения каждой строки

Надеюсь, это имеет смысл. Я могу предоставить свой код, но я не думаю, что он особенно полезен для этого примера.

Контекст:

При запуске действия база данных сканируется для получения значений для другой задачи. Однако это занимает больше времени, чем нужно, потому что база данных очищается и пополняется медленно. Следовательно, задача может быть выполнена только после полного заполнения базы данных.

В идеальном мире база данных будет сканироваться и значения, используемые для задачи, будут заменены только при наличии полного набора обновленных данных.

1 Ответ

2 голосов
/ 25 августа 2011

Ваша основная проблема с подходом (b) - очистка всех данных и медленное повторное заполнение - кажется, что любой запрос между пустым и завершением пополнения должен быть отклонен.

Вы могли бы просто поставитьпустой / повторный процесс в транзакции.Таким образом, база данных всегда будет иметь данные для чтения.

В качестве альтернативы, если это не жизнеспособное решение, как насчет добавления более новых результатов к существующим, но вставляется как с активным ключом, установленным в 0.Затем, когда процесс добавления записей будет завершен, используйте транзакцию для поиска и удаления активных в данный момент записей и (в той же транзакции) обновите неактивные записи до активных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...