Java Android SQLite:使用onUpgrade更新数据?

Java Android SQLite:使用onUpgrade更新数据?,java,android,sqlite,Java,Android,Sqlite,假设我在一个单独的程序中创建了一个SQLite数据库,并将其包含在应用程序启动时要复制的资产文件夹中(假设它不存在)。数据库包含两列,A和B。假设A包含一个位置列表(巴黎、伦敦、纽约等——用户无法编辑的内容),B存储用户访问相应位置的次数(用户可以从应用程序中编辑) 现在,假设我在原始数据库中拼错了一个位置的名称。我进入我的SQLite浏览器,对该条目进行快速修复,保存它,并替换我的资产文件夹中的旧DB文件。如何更新已复制的数据库中的A列,以反映我对资产文件夹中现在为只读的数据库所做的更改,而不

假设我在一个单独的程序中创建了一个SQLite数据库,并将其包含在应用程序启动时要复制的资产文件夹中(假设它不存在)。数据库包含两列,A和B。假设A包含一个位置列表(巴黎、伦敦、纽约等——用户无法编辑的内容),B存储用户访问相应位置的次数(用户可以从应用程序中编辑)

现在,假设我在原始数据库中拼错了一个位置的名称。我进入我的SQLite浏览器,对该条目进行快速修复,保存它,并替换我的资产文件夹中的旧DB文件。如何更新已复制的数据库中的A列,以反映我对资产文件夹中现在为只读的数据库所做的更改,而不删除它们存储的数据


我最初的印象是使用onUpgrade,但我看到有人说它只是为了更新数据库的模式。在这种情况下,我的模式没有改变,只有其中的一些数据…

onUpgrade
可以正确地用于您需要的内容。我在升级过程中同时更新架构和静态数据。我的onUpgrade结构如下:

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        if (oldVersion < 211)
        {
            // In this version we transfer Log data into new date keeping format - just milliseconds, no string formatting
            db.execSQL("DROP TABLE IF EXISTS " + LogData.TABLE_NAME);
            db.execSQL(LogData.TABLE_CREATE_SQL);
            logInformation(db, "Application upgraded to 2.1.1 level and existing log data cleared from device.");
        }

        if (oldVersion < 212)
        {
        }

        if (oldVersion < 220)
        {
            db.execSQL("DROP TABLE IF EXISTS " + MailData.MAIL_TABLE_NAME);
        }
    }
@覆盖
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion)
{
如果(旧版本<211)
{
//在这个版本中,我们将日志数据转换为新的日期保持格式—仅毫秒,没有字符串格式
db.execSQL(“如果存在删除表”+LogData.TABLE_NAME);
db.execSQL(LogData.TABLE\u CREATE\u SQL);
登录信息(db,“应用程序升级到2.1.1级,现有日志数据已从设备中清除”);
}
如果(旧版本<212)
{
}
如果(旧版本<220)
{
db.execSQL(“如果存在删除表”+MailData.MAIL\u TABLE\u NAME);
}
}

让我们从头开始。。当您使用构造函数SQLiteOpenHelper打开数据库时,它将从您那里获得版本信息

如果数据库不存在,它将调用onCreate方法。 如果现有数据库的版本低于您的版本,它将调用onUpgrade方法

请阅读android以了解更多信息

因此,您可以在onCreate方法中插入初始信息。您可以在onUpgrade方法中更改表或向表中插入一些附加信息

希望能有帮助