onUpgrade数据库Android版本号不增加

时间:2011-09-23 21:08:17

标签: android sqlite onupdate

我正在尝试在我的Android应用程序中更新我的数据库。当我更新版本号时,会调用onUpgrade,但版本号不会增加,因此每次访问数据库时都会调用onUpgrade。这是我的代码:

private final static int DB_VERSION = 8;

        public DataBaseHelper(Context context) {

        super(context, DB_NAME, null, DB_VERSION);
        this.myContext = context;
    }   
        @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "in onCreate");
        try {
            copyDataBase();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d(TAG, "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
        myContext.deleteDatabase(DB_NAME);
        Log.d(TAG, "the version is " + db.getVersion());
        db.setVersion(newVersion);
        Log.d(TAG, "the version is " + db.getVersion());
        onCreate(db);           
    }

任何人都知道为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

请勿尝试手动设置版本。 (这都是照顾的。)

不要尝试删除数据库。你正在升级它,你应该不会真的感到惊讶的是,手动设置你刚刚删除的数据库版本效果不佳。

您在onUpgrade中应该做的就是对表格结构进行必要的更改。如果你想通过删除当前表(不是数据库)然后重新创建它们来做到这一点,那就没关系。

如果您需要保留表格中的数据,请查看此问题以获取有关如何执行此操作的建议: Upgrade SQLite database from one version to another?

答案 1 :(得分:0)

我最后在assets文件夹中添加了另一个数据库。我知道它不是最好的解决方案,但它确实有效。这次应用程序升级后,它只会写新数据库 - 它有一个新名称 - 而不是旧名称。我检查旧的是否存在,如果存在,我将其删除。