首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android更新-合并数据库内容?

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

Stack Overflow用户
提问于 2012-06-05 22:06:21
回答 2查看 988关注 0票数 1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-05 22:30:42

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

在我最近的所有项目中,我使用以下方法逐个版本地升级用户手机上的数据库(例如,如果用户一段时间没有更新应用程序,则甚至从version1升级到version5 ):

代码语言:javascript
复制
@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表,则不能删除用户的备注,因此要小心处理这些数据。

票数 3
EN

Stack Overflow用户

发布于 2012-06-05 22:17:45

您必须使用onUpgradeDatabase

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10898866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档