Android SQLite:使用onUpgrade更新数据?

时间:2012-06-12 05:31:32

标签: java android sqlite

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

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

我最初的印象是使用onUpgrade,但我看到人们说这只是为了更新数据库的架构。在这种情况下,我的架构没有改变,只有一些数据......

2 个答案:

答案 0 :(得分:2)

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

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

请阅读android documentation以获取更多信息。

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

希望有所帮助......

答案 1 :(得分:1)

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);
        }
    }