Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中升级数据库的正确方法是什么_Android_Sqlite - Fatal编程技术网

在Android中升级数据库的正确方法是什么

在Android中升级数据库的正确方法是什么,android,sqlite,Android,Sqlite,如果我想保留一些旧数据并迁移到数据库的新版本,onUpgrade方法中的正确步骤是什么 保留旧数据 扔掉旧桌子 创建新表并插入旧数据 有一个简化的版本还是有更好的方法?谢谢 升级数据库: 在表中添加新字段 在onUpgrade中执行以下步骤 复制临时表中的旧数据 使用新字段创建新表 再次将数据从临时表复制到新表 下降温度表 还可以在onCreate中为新用户创建新表 升级时的示例代码 public void onUpgrade(SQLiteDatabase db, int oldVersion,

如果我想保留一些旧数据并迁移到数据库的新版本,onUpgrade方法中的正确步骤是什么

保留旧数据 扔掉旧桌子 创建新表并插入旧数据 有一个简化的版本还是有更好的方法?谢谢

升级数据库:

在表中添加新字段

在onUpgrade中执行以下步骤

复制临时表中的旧数据

使用新字段创建新表

再次将数据从临时表复制到新表

下降温度表

还可以在onCreate中为新用户创建新表

升级时的示例代码

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            if (oldVersion < newVersion) {
                if (oldVersion == 3) {
                    /**
                     * code is upgrade privious version to letest version
                     * */
                    db.beginTransaction();
                    db.execSQL("ALTER TABLE " + TableConstants.TABLE_Mst.getTableName()
                + " RENAME TO " + TableConstants.TABLE_Mst.getTableName() + "_Obsolete");
        db.execSQL(TABLE_CREATE_query_Mst);
        db.execSQL("INSERT INTO " + TableConstants.TABLE_Mst.getTableName() + "("
                + "f1, f2, f3) "
                + " SELECT f1, f2, f3 FROM " + TableConstants.TABLE_Mst.getTableName() + "_Obsolete");
        db.execSQL("DROP TABLE IF EXISTS "
                + TableConstants.TABLE_Mst.getTableName() + "_Obsolete");
                    db.setTransactionSuccessful();
                    db.endTransaction();
                    db.setVersion(newVersion);

                }
                }
                }
在数据库中添加新表

执行以下步骤

在onUpgrade 1.创建新表

立即创建 1.创建新表


注意:管理您的数据库版本,与下一版本相同,请检查旧版本是否有效

是否正在更改要保留数据的表的架构?如果是用户创建的,则应保留旧数据。您可以随时更改表以修改表结构。@sachingarg,是的,数据库架构已更改,必须恢复部分旧数据,干杯。@WenChao,我认为任何简化的方法都不可能。我能想到的一种方法是,修改onUpgrade方法中的所有表,然后为新添加的列插入默认值。将保留所有现有列的数据。请确保在升级时没有使用任何drop/delete语句。@sachingargYeah,看来我们最终必须编写一些样板代码。不过还是要谢谢你。在onUpgrade中使用事务或setVersion是错误的;这已经由SQLiteOpenHelper处理。在许多情况下,使用ALTERTABLE可以添加列。。。添加列。。。有关限制,请参阅。