Android中的onUpgrade()sqlite数据库

时间:2012-10-31 13:33:55

标签: android sqlite

我创建了一个Android应用程序,如果有新版本的应用程序,请在启动时检查。如果是,则应用程序下载新的apk文件并过度安装新的apk。 我的应用程序使用sqlite db。但是这个db,从一个版本到另一个版本都可以改变。 我想我必须使用这个方法:

 onUpgrade()

但我不确切知道如何使用它。

当我启动应用程序时,我将此代码用于克里特数据库(如果不存在):

DbHelper mDHelper = new DbHelper(context, DB_NAME, null, DB_VERSION)

如果我想使用onUpgrade()方法,我应该更改什么? 我什么时候打电话呢?

3 个答案:

答案 0 :(得分:19)

当数据库版本发生变化时,会调用

onUpgrade()(您不会自己调用),这意味着基础表结构发生了变化等。

一般来说,这意味着操作系统告诉你“嘿,你问过数据库结构版本10但是我发现我们在这里找到了更旧的东西,所以你有机会在开始使用数据库之前修复它(可能由于结构不匹配导致崩溃)“

在该方法中,你应该做所有必要的事情,好吧..升级旧数据库的结构,以构建匹配当前版本的要求,如添加/删除列,转换行内容,甚至完全删除旧数据库,并从头开始创建它 - 对于Android,你在这里做什么并不重要 - 它只是你的代码执行必要工作(如果有的话)的紧急回调。您需要注意用户可能不会经常更新,因此您必须始终处理从版本X升级到Y,因为X可能不等于即(Y-1)。

答案 1 :(得分:5)

如果您正在使用SQLiteOpenHelper,则每当您更改数据库版本时都会调用onUpgrade。 还有一个额外的要求。数据库名称必须保持不变。

Old Version:
dbName = "mydb.db"
dbVersion = 1

New Version:
dbName = "mydb.db"
dbVersion = 2

在内容提供程序的onCreate中,您创建了一个采用这些参数的SQLiteOpenHelper实例。您的SQLiteOpenHelper实现如下所示:

public static final class MySQLiteOpenHelper extends SQLiteOpenHelper {

        public MySQLiteOpenHelper(Context context, int dbVersion, String dbName) {
            super(context, dbName, null, dbVersion);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            //Code to create your db here
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // Code to upgrade your db here
        }

}

当您更改表格或在数据库中添加更多表格时也会调用它

答案 2 :(得分:1)

我发现这非常有帮助 https://thebhwgroup.com/blog/how-android-sqlite-onupgrade

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
         db.execSQL(DATABASE_ALTER_TEAM_1);
    }
    if (oldVersion < 3) {
         db.execSQL(DATABASE_ALTER_TEAM_2);
    }
}