Обновление Android - объединить содержимое базы данных?

1

Что делать, если я обновляю таблицы базы данных, которые использует мое приложение, например, если я представляю другой класс или изменяю существующее. Теперь, когда пользователь обновляет приложение, как я могу объединить любое существующее содержимое базы данных моего приложения с новыми определениями db?

  • 1
    Не существует автоматического способа сделать это ... поэтому вам придется обновлять его вручную, создавая временные таблицы, перемещая туда данные, удаляя таблицы, создавая их заново и т. Д., Используя предложения SQL.
Теги:

2 ответа

3
Лучший ответ

Существует абстрактный метод для этого, называемый onUpgradeDatabase(). Эта функция вызывается, когда Android думает, что ваша база данных нуждается в обновлении. Это чаще всего происходит при изменении номера версии базы данных.

Во всех моих последних проектах я использую следующий подход для обновления базы данных по версии телефона пользователя по версии (даже от версии: version1 до версии5, если пользователь некоторое время не обновлял приложение):

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    updateDatabase(db, oldVersion + 1, newVersion);
}

private void updateDatabase(SQLiteDatabase db, int fromVersion, int toVersion) {
    Log.i("Updating database from version " + fromVersion + " to " + toVersion);

    for (int ver = fromVersion; ver <= toVersion; ver++) {
        switch (ver) {
            case 1:
                handleDatabaseVersion1(db);
                break;
            case 2:
                handleDatabaseVersion2(db);
                break;                  
        }
    }
}

private void handleDatabaseVersion1(SQLiteDatabase db) {
   // create initial tables and so on
}

private void handleDatabaseVersion2(SQLiteDatabase db) {
   // here we extend the Users table with another two columns
}

Если вы изменяете какую-либо схему, включая новые таблицы, новые столбцы, измененные типы столбцов и все, что вам нужно, выполнять соответствующие инструкции SQL для обновления всего, не удаляя все данные пользователя! Скажем, вы пишете приложение для блокнота, и все заметки хранятся в базе данных. Если вы изменяете таблицу Notes, вы не должны удалять примечания пользователя, поэтому обращайтесь с этими данными с осторожностью.

1

Вам нужно будет использовать onUpgradeDatabase

В этом методе вы можете изменять таблицы.

  • 0
    Просто чтобы добавить к этому правильному ответу, попробуйте поискать в базе данных UpgradeDatabase, здесь уже есть несколько тем с большим количеством примеров. stackoverflow.com/questions/7173896/...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню