Android更新 - 合并数据库内容?

时间:2012-06-05 14:06:21

标签: java android

如果我更新我的应用程序正在使用的数据库表,例如,如果我引入另一个类或更改现有类,该怎么办? 现在,当用户更新应用程序时,如何将我的应用程序的任何现有数据库内容合并到新的数据库定义?

2 个答案:

答案 0 :(得分:3)

有一种名为onUpgradeDatabase()的抽象方法。当Android认为您的数据库需要更新时,将调用此函数。这通常在您更改数据库版本号时发生。

在我最近的所有项目中,我使用以下方法在用户的手机版本上按版本升级数据库(即使从例如:如果用户暂时不更新应用程序,则版本1到版本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 :(得分:1)

您必须使用onUpgradeDatabase

在此方法中,您可以更改表格。