Как выполнить миграцию схемы базы данных в Android? - PullRequest
20 голосов
/ 22 марта 2010

Существует ли стандартный способ миграции схем базы данных на Android? Например, пользователь устанавливает более новую версию моего приложения для Android, но новая версия должна вносить изменения в схему базы данных (и очистка базы данных пользователя и запуск заново не возможен!). Поэтому мне нужно запустить некоторые операторы ALTER и / или скопировать таблицы при первом запуске моей новой версии.

Ответы [ 7 ]

10 голосов
/ 27 июля 2011

Да. SQLiteOpenHelper поддерживает миграцию между различными версиями схем БД.

Обновление выполняется путем реализации

public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)

. Также поддерживается откат к предыдущей версии:

public abstract void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)
7 голосов
/ 27 февраля 2012

Немного подумав, вы можете почти автоматизировать многие методы SQLiteOpenHelper. Посмотрите на это сообщение в блоге http://www.greenmoonsoftware.com/2012/02/sqlite-schema-migration-in-android/

Обновление. Я столкнулся с некоторыми проблемами, если обновление базы данных занимает некоторое время. Посмотрите на эту запись в блоге для реализации, которая работает для меня. http://www.greenmoonsoftware.com/2012/05/android-developer-how-to-safely-update-the-application-database/

6 голосов
/ 28 апреля 2014

Начиная с версии 3.0 Flyway теперь поддерживает миграцию базы данных на Android. Он работает с SQLite, но также и с любой другой базой данных, которую вы хотите использовать (локальная в памяти или БД на сервере для двухуровневых приложений).

Миграции могут быть написаны как на SQL, так и на Java.

1 голос
/ 04 января 2017

Вы можете улучшить значение по умолчанию SQLiteOpenHelper с помощью библиотеки Android-Migrator , которая позволяет применять миграции из sql файлов в папке android assets.

1 голос
/ 25 февраля 2014

Все приведенные выше ответы, касающиеся SQLiteOpenHelper , являются правильными, но все они содержат своего рода антипаттерн - создание / изменение структуры БД со строками.Это делает разработку и обслуживание более дорогими.Иногда миграция состоит из множества утверждений, некоторые из которых могут быть довольно большими.Запись их в виде строк без какого-либо выделения синтаксиса ... ну, для небольших структур это может сработать, но для некоторых более крупных это будет кошмар.

Лучший способ управлять изменениями схемы - сохранитькаждый сценарий миграции во внешнем файле и заставить метод SQLiteOpenHelper onUpgrade выполнять их автоматически в правильном порядке.Вот статья на эту тему: http://www.vertabelo.com/blog/sqlite-on-android-handling-database-structure-changes. Надеюсь, это поможет.

0 голосов
/ 25 июля 2013

ответ Янченко правильный, однако, вы можете взглянуть на Droid Migrate , который я написал, который широко использует SQLiteOpenHelper для облегчения автоматической миграции на SQLite (очень похоже на то, какRails делает это).

0 голосов
/ 21 сентября 2012

Я знаю, что это старый, но я разработал плагин eclipse с открытым исходным кодом, который является языком, специфичным для домена (DSL, написанный с XText), который позволяет указывать базу данных в виде списка миграций.

Он генерирует ваш ContentProvider, SqliteOpenHelper и Contract для вас в API, который напоминает API, такой как API контактов или Media API.

Я написал базовое руководство, которое поможет вам начать здесь http://robotoworks.com/mechanoid-plugin/mechanoid-db/

Пока он поддерживает создание таблиц, создание представлений и изменение операторов таблиц, я надеюсь полностью реализовать синтаксис Sqlite, где это уместно для этого DSL.

Надеюсь, что это помогает и извините за спам! :)

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