Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

С небольшим количеством мыслей вы можете почти автоматизировать многие методы 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/

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

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

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

Надеюсь, что это поможет и жаль спама!:)

Ответ 7

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