Подход к базе данных Android для будущих обновлений - PullRequest
0 голосов
/ 11 декабря 2011

Каков наилучший способ работы с базой данных sqlite в Android?

Файл базы данных sqlite (скопируйте его впервые в среду приложения)

OR

Создание таблиц в коде (в onCreate () помощника базы данных)

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

Спасибо!

Ответы [ 4 ]

6 голосов
/ 11 декабря 2011

Вы должны создать (в коде) его при первом использовании. Android предлагает класс SQLiteOpenHelper , который должен использоваться для него. SQLiteOpenHelper определяет следующие методы:

onCreate(SQLiteDatabase db): вызывается при создании базы данных, здесь вы можете создавать таблицы и столбцы для них, создавать представления или триггеры.

onUpgrade(SQLiteDatabse db, int oldVersion, int newVersion): вызывается, если используемая база данных старше текущей версии. Обработка обновления (перенос данных, создание / удаление таблиц)

Смотрите здесь хороший урок: http://www.codeproject.com/KB/android/AndroidSQLite.aspx

2 голосов
/ 26 января 2012

Если вы не ожидаете, что ваш БД будет обновлен в результате взаимодействия с пользователем, файл может быть лучшим вариантом, особенно в случае, если у вас есть много данных для вставки (копирование файла или куча вставок).

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

Каждый раз, когда вам потребуется обновить схему или добавить новые данные (выпуская обновление), вам нужно будет учитывать, что существующие данные могут быть изменены или дополнены некоторыми вещами, которые пользователи ожидают найти ПОСЛЕ обновления.

Так что замена файла больше не вариант.

В случае, если вам необходимо использовать вспомогательный подход sqllite, я хотел бы услышать некоторые отзывы о моем генераторе вспомогательного кода sqllite, которые вы можете найти здесь: github

0 голосов
/ 26 января 2012

Для больших объемов данных вы можете рассмотреть решение такого рода: создайте пустую базу данных в коде и предоставьте действие, которое отвечает намерению с помощью этого действия: android.intent.action.SEND.Ответьте, проанализировав отправленный файл, и заполните базу данных содержимым.Разработайте формат, который может быть легко проанализирован (XML не нужен для всего ;-), поэтому код для анализа файла и заполнения базы данных невелик (мой двоичный файл для этого, включая пользовательский интерфейс для отображения прогресса (который является большей частьюактивность) размером менее 12 кБ).

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

0 голосов
/ 23 января 2012

Не относится только к SQLLite или Android, однако я работал над торговым приложением Windows, где пользователи могли сохранять «документы» в формате XML - то есть: настраиваемое представление, сохраняющее свои предпочтения в отношении отчетов и различные другие флаги, которые затем можно было бы распространить среди команды. , При запуске был загружен профиль пользователя и проанализированы его документы для настройки пользовательского интерфейса.

Приложение должно было выпускать каждые 3 недели, а существующие документы были необходимы для работы с новым приложением. Это было проблемой, так как иногда схема XML изменялась, приводя к новым или удаленным полям.

Мы решили создать абстрактный тип с именем Patcher. Каждый выпуск может иметь один или несколько типов DerivedPatcher, которые запускались при первой загрузке после обновления. У Patcher будет абстрактный метод для исправления документов XMl. Это означает, что документ XML будет загружен со старой схемой и обновлен, сохранен на месте с использованием новой схемы. Патчер также будет иметь метод отката, чтобы разрешить развертывание в случае возникновения ошибки.

Тот же подход может быть применен к таблицам в базе данных. По сути, если вы можете создать патчер или PatchManager для сериализации таблиц ключей в XML в памяти, а затем применить изменения в БД и записать данные обратно, вы сможете выполнить миграцию базы данных универсальным, многократно используемым способом.

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

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