3

我正在尝试在我的 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);           
    }

有谁知道为什么会这样?

4

2 回答 2

2

不要尝试手动设置版本。(这一切都得到了照顾。)

不要尝试删除数据库。您正在升级它,手动设置刚刚删除的数据库的版本并不能很好地工作,这并不会让您感到惊讶。

您应该做的onUpgrade就是对表的结构进行所需的更改。如果您想通过删除当前表(而不是数据库)然后重新创建它们来做到这一点,那很好。

如果您需要保留表中的数据,请查看此问题以获取有关如何执行此操作的建议:将 SQLite 数据库从一个版本升级到另一个版本?

于 2011-09-26T12:59:57.820 回答
0

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

于 2011-10-21T17:16:49.410 回答