Развертывание базы данных Android только один раз - PullRequest
1 голос
/ 25 февраля 2011

Я нашел много руководств по развертыванию базы данных SQLite вместе с приложением для Android. Я также обнаружил, что не могу удалить файлы из папки ресурсов во время выполнения, потому что .apk подписан.
Теперь я хочу предлагать обновленную базу данных для моего приложения каждую неделю. Мой план состоял в том, чтобы обновить apk и опубликовать его на торговой площадке. Я, очевидно, не хочу копировать базу данных при каждом запуске программы из папки ресурсов в папку базы данных приложения. Я попытался сравнить размер файла, чтобы узнать, больше ли новая база данных, чем старая. Но, похоже, если вы не добавите или не измените много данных, размер останется прежним. Поэтому мой вопрос: что такое разумный способ скопировать базу данных только после первой установки или после обновления приложения?

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

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Ответ: вам не нужно.Предположим, что вы используете SQLiteOpenHelper для реализации своей базы данных, у вас есть два переопределения:

onCreate(SQLiteDatabase db);
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);

Этих параметров достаточно для решения всех проблем.Когда вы создаете свой openhelper, вам нужно предоставить ему «требуемую» версию базы данных.Он автоматически обнаружит устройство, независимо от того, имеет ли оно ранее базу данных вашего приложения или нет.Таким образом, возможны три ситуации:

  1. БД не найден (Скорее всего, это чистая установка вашего приложения) => вызов onCreate ()
  2. БД найден и соответствуетversion => Ни одно из вышеприведенных переопределений не вызовет
  3. Db найдена, но версия ниже, чем требуемая (предположим, вам нужно изменить структуру db после обновления вашего приложения) => call onUpgrade ()

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

0 голосов
/ 25 февраля 2011

Посмотрите на пример NotePadProvider.java с сайта разработчиков Android.По сути, каждый раз, когда вы обновляете версию базы данных, в вашем классе SQLOpenHelper вызывается метод onUpgrade.Вставьте логику, которую вы ищете в этот метод.

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