gpt4 book ai didi

android - OnUpgrade 何时被调用以及它如何获得 oldVersion 参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:57 25 4
gpt4 key购买 nike

我正在为我当前的应用程序进行更新。我的应用程序使用 SQLite DB,到目前为止我使用的是版本 1。我需要在我的第二个版本中更改/引入新表。我做了研究,发现最好的方法是使用 switch(case) 语句,在该语句中我以 fall-through 方式对 db 进行更新.

我的问题是,android 如何知道 onUpgrade() 中的旧版本是什么?。事实上,它什么时候被调用?

所以对于第一次下载我更新的应用程序的用户,我假设 onUpgrade() 不会被调用! android 怎么知道什么时候不调用 onUpgrade()

请为我澄清一下。我想提交我的第一个更新,我不想失去我来之不易的用户:)

最佳答案

在实现 SQLiteOpenHelper 时,您将版本参数传递给父类(super class)构造函数。这应该是一个静态值,您可以在您的应用程序的 future 版本中更改(通常您希望它是您的 SQLiteOpenHelper 实现的静态最终属性,以及您传递给父类(super class)构造函数的数据库名称).

然后,当您想要更新数据库时,增加将在您的 SQLiteOpenHelper 实现中使用的版本参数,并以编程方式在 中执行您打算执行的 SQL 修改>onUpgrade() 方法。

假设您的数据库从版本 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... );
}
}

当父类(super class)构造函数运行时,它会将存储的 SQLite .db 文件的版本与您作为参数传递的版本进行比较。如果它们不同,将调用 onUpgrade()

我应该检查实现,但我假设如果需要创建数据库,onUpgrade() 也会在 onCreate() 之后调用,并且有一种方法可以确保执行所有升级(例如,通过强制所有版本号为正整数并使用版本 0 初始化新创建的数据库)。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com