Sqlite - 降级 [英] Sqlite - on downgrade

查看:130
本文介绍了Sqlite - 降级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近我更新了我的安卓游戏,编辑sqlite数据库在我的表格中添加新字段,更新后,我收到了4个崩溃报告(其中3个来自同一设备,三星Galaxy S4)

Recently I updated my android game, editing sqlite database adding new field in my table, after update, I received 4 crash reports (3 of them comes from same device, Samsung Galaxy S4)


android.database.sqlite.SQLiteException:无法将数据库从
版本2降级为1
android.database.sqlite.SQLiteOpenHelper.onDowngrade( SQLiteOpenHelper.java:361)
at
android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:255)
at
android.database.sqlite.SQLiteOpenHelper.getWritableDatabase( SQLiteOpenHelper.java:164)

android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1 at android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:361) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:255) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)

我真的无法理解可能是什么原因,什么时候甚至可以开始降级数据库虽然它实际上需要在我的上一个数据库中升级。

I really can not understand what might be the reason, when it could be even possible to start downgrading database, while it actually needed to upgrade in my last database.

在更新期间,我显然将DATABASE_VERSION值从1增加到2

During update, I have obviously increased DATABASE_VERSION value from 1 to 2

我没有凌驾于降级方法,我的onUpgrade看起来如下所示:

I am not overriding onDowngrade method, my onUpgrade looks like following:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
    updateToVersion2(db, oldVersion, newVersion);
}

private void updateToVersion2(SQLiteDatabase db, int oldVersion, int newVersion)
{
    if (oldVersion <= 1)
    {
        ContentValues cv1 = new ContentValues();
        cv1.put(FIELD_WORLD_ID, 6);
        cv1.put(FIELD_MAX_UNLOCKED, 1);
        db.insert(TABLE_LEVELS, null, cv1);
    }
}

谢谢。

推荐答案

问题是您没有覆盖 onDowngrade 方法。如 javadoc ,你需要,否则你会得到一个例外:

The problem is that you are not overriding the onDowngrade method. As explained in the javadoc, you need to, or you will get an exception:


如果没有被覆盖,默认实现将拒绝降级并抛出SQLiteException

If not overridden, default implementation will reject downgrade and throws SQLiteException

这篇关于Sqlite - 降级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆