我正在为我当前的应用程序更新。我的应用程序使用sqlite数据库,目前我在版本1。我需要在第二个版本中修改/引入新表。我做了我的研究,我发现最好的方法是使用switch
(case
)语句,在其中我以一种失败的方式对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/