我正在为我当前的应用程序更新。我的应用程序使用sqlite数据库,目前我在版本1。我需要在第二个版本中修改/引入新表。我做了我的研究,我发现最好的方法是使用switchcase)语句,在其中我以一种失败的方式对db进行更新。
我的问题是,android如何知道onUpgrade()中的旧版本是什么?事实上,什么时候叫它?。
因此,对于第一次下载我更新的应用程序的用户,我假设不会调用onUpgrade()!android怎么知道什么时候不调用onUpgrade()
请帮我澄清一下。我想提交我的第一次更新,我不想失去我辛苦赚来的用户:)

最佳答案

在实现SQLiteOpenHelper时,需要向超类构造函数传递一个版本参数。这应该是一个静态值,可以在应用程序的未来版本中更改(通常您希望它是SQLiteOpenHelper实现的静态最终属性,以及传递给超类构造函数的数据库名称)。
然后,当您想要更新数据库时,您可以增加SQLiteOpenHelper实现中将使用的版本参数,并在onUpgrade()方法内以编程方式执行您想要执行的sql修改。
假设您的数据库从版本1中的表A开始,然后在版本2中添加了表B,在版本3中添加了表C,那么onupgrade方法如下所示:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) { // do stuff for migrating to version 2
        db.execSQL( ...create table B... );
    }
    if (oldVersion < 3) { // do stuff for migrating to version 3
        db.execSQL( ...create table C... );
    }
}

当超类构造函数运行时,它会将存储的sqlite.db文件的版本与作为参数传递的版本进行比较。如果它们不同,onUpgrade()将被调用。
我应该检查实现,但是如果需要创建数据库,我假设onUpgrade()也在onCreate()之后调用,并且有一种方法可以确保执行所有升级(例如,强制所有版本号为正整数,并用versio初始化新创建的数据库)。N 0)。

关于android - 何时调用OnUpgrade以及如何获取oldVersion参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14371084/

10-14 21:18