【问题标题】:onUpgrade database Android version number not increasingonUpgrade 数据库 Android 版本号不增加
【发布时间】:2011-09-23 21:08:17
【问题描述】:

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

有人知道为什么会这样吗?

【问题讨论】:

  • 也许这个链接可能会有所帮助stackoverflow.com/questions/7173896/…
  • 我已经看过这个链接了……我还是想不通。即使数据库版本号是静态的,版本号也不会在 onUpgrade() 中升级。调用了 OnUpgrade,但之后版本号没有更新...
  • 调用 onUpgrade 时 oldVersion 和 newVersion 的值是多少?

标签: android sqlite onupdate


【解决方案1】:

不要尝试手动设置版本。 (这都处理好了。)

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

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

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

【讨论】:

  • 根据api,context.deleteDatabase()删除整个数据库。我想我确实想删除整个内容,因为我的数据库的结构和所有 2000 多个条目都需要更改?所有的表格也需要改变......
  • 不,尝试删除数据库会严重搞砸这里的事情。只需删除表,然后重新创建它们。
  • 如何只重写 assets 文件夹中的表而不是整个数据库?
  • sqliteDatabase.execSQL("如果存在则删除表" + TABLE_NAME);
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多