Android SQLite数据库升级

Android SQLite数据库升级,android,sqlite,Android,Sqlite,我对android SQLite数据库处理有点困惑。我看了一些教程,但没有弄明白确切的意思 我们可以有一个扩展SQLiteOpenHelper的数据库类,可以重写onCreate()方法并创建数据库 升级数据库部分有点混乱。在下面的方法中,如何处理验证 onUpdate(SQLiteDatabase db,int旧版本,int新版本) 这是否意味着当我们第一次创建数据库时,版本是1。然后,修改后的版本变为2。 那么如果我们想再次修改 旧版本=2,新版本=3 [onUpdate(SQLiteDat

我对android SQLite数据库处理有点困惑。我看了一些教程,但没有弄明白确切的意思

我们可以有一个扩展
SQLiteOpenHelper
的数据库类,可以重写
onCreate()
方法并创建数据库

升级数据库部分有点混乱。在下面的方法中,如何处理验证
onUpdate(SQLiteDatabase db,int旧版本,int新版本)

这是否意味着当我们第一次创建数据库时,版本是1。然后,修改后的版本变为2。 那么如果我们想再次修改 旧版本=2,新版本=3
[
onUpdate(SQLiteDatabase db,int旧版本,int新版本)
]

当我们传递构造函数版本时,将执行此方法,如以下代码(如2所示)


我需要知道当我们需要调用
onUpgrade()
方法时,是应该始终传递版本2,还是必须每次增加一个版本来更新上一个版本。

我使用它来简化数据库模式的演化,您可能会发现它也很有用。

我使用它来简化数据库模式的演化,您可能会发现它也很有用。

如何维护数据库版本完全取决于您自己。您可以在更改表结构或修改内容后更改版本。维护版本控制没有硬性规定。这取决于项目的要求。

如何维护数据库版本完全取决于您自己。您可以在更改表结构或修改内容后更改版本。维护版本控制没有硬性规定。它取决于项目的要求。

每次架构更改时,都会增加数据库版本

您永远不需要直接调用
onUpgrade
。当您打开数据库时,Android会在需要时调用它,方法是将数据库的版本与代码指定为当前版本的版本进行比较

您只需要在
onUpgrade
中处理升级过程-它可能是这样的:

int curVer = oldVersion;
while ( curVer < newVersion ) {
    curVer++;
    switch ( curVer ) {
        case 2: {
            // Upgrade from V1 to V2
            break;
        }
        case 3: {
            // Upgrade from V2 to V3
            break;
        }
        case 4: {
            // Upgrade from V3 to V4
            break;
        }
    }
}
int curVer=oldVersion;
而(曲线<新版本){
curVer++;
道岔(弯道){
案例2:{
//从V1升级到V2
打破
}
案例3:{
//从V2升级到V3
打破
}
案例4:{
//从V3升级到V4
打破
}
}
}
假设您的新版本为4,旧版本为1-第一次迭代将curVer增加到2,并将运行V2到V3升级代码。第二次迭代将curVer增加到3并运行V2到V3升级代码,最后一次迭代将curVer增加到4并运行V3到V4升级代码


这适用于所有小于新版本的旧版本值。如果您的用户跳过应用程序的升级,则会依次通过中间版本进行升级。

每次架构更改时,都会增加数据库版本

您永远不需要直接调用
onUpgrade
。当您打开数据库时,Android会在需要时调用它,方法是将数据库的版本与代码指定为当前版本的版本进行比较

您只需要在
onUpgrade
中处理升级过程-它可能是这样的:

int curVer = oldVersion;
while ( curVer < newVersion ) {
    curVer++;
    switch ( curVer ) {
        case 2: {
            // Upgrade from V1 to V2
            break;
        }
        case 3: {
            // Upgrade from V2 to V3
            break;
        }
        case 4: {
            // Upgrade from V3 to V4
            break;
        }
    }
}
int curVer=oldVersion;
而(曲线<新版本){
curVer++;
道岔(弯道){
案例2:{
//从V1升级到V2
打破
}
案例3:{
//从V2升级到V3
打破
}
案例4:{
//从V3升级到V4
打破
}
}
}
假设您的新版本为4,旧版本为1-第一次迭代将curVer增加到2,并将运行V2到V3升级代码。第二次迭代将curVer增加到3并运行V2到V3升级代码,最后一次迭代将curVer增加到4并运行V3到V4升级代码


这适用于所有小于新版本的旧版本值。如果您的用户跳过应用程序的升级,则会依次通过中间版本进行升级。

是的,但您能否解释在我们需要升级数据库时如何管理这些版本。这意味着我们第一次创建数据库意味着版本1。然后修改一次so版本2。然后,如果我们想再次修改旧版本=2、newVerison=3或每次需要调用onUpgrade()方法时,都必须在构造函数中将版本传递为2,但您能否解释一下当我们需要升级数据库时如何管理版本。这意味着我们第一次创建数据库意味着版本1。然后修改一次so版本2。然后,如果我们想再次修改旧版本=2、newVerison=3或每次需要调用onUpgrade()方法时,都必须在构造函数中将版本传递为2,但您能否解释一下当我们需要升级数据库时如何管理版本。这意味着我们第一次创建数据库意味着版本1。然后修改一次so版本2。然后,如果我们想再次修改旧版本=2、newVerison=3或每次需要调用onUpgrade()方法时,都必须在构造函数中将版本传递为2,但您能否解释一下当我们需要升级数据库时如何管理版本。这意味着我们第一次创建数据库意味着版本1。然后修改一次so版本2。然后,如果我们想再次修改旧版本=2、newVerison=3或每次需要调用onUpgrade()方法时,都必须在构造函数中将版本传递为2,您能告诉我更新时如何在数据库中保留数据吗?@PratikButani升级时不必删除任何内容。简单的模式更改(如添加列或表)不会直接影响现有数据,而更复杂的更新会影响现有数据