【问题标题】:Upgrading SQL database when the tables have not changed but an insert method has表未更改但插入方法已更改时升级 SQL 数据库
【发布时间】:2019-03-16 19:23:55
【问题描述】:

我有一个要插入对象的 SQLite 数据库类,我想插入更多对象,我当前的版本是 1,但我知道除非升级到版本 2,否则不会看到效果。

这里

 @Override
    public void onCreate(SQLiteDatabase db) {

// my method

insertItems(db);

}

//where I have my items added
 private void insertItems(SQLiteDatabase db) {

        ArrayList<ExpenseItem> items = new ArrayList<>();
}

如何更新或升级此数据库?我有表格,但表格并没有改变,只有方法 insertItems。

那我在这里做什么。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // The database is still at version 1, so there's nothing to do be done here.

}

【问题讨论】:

  • 您不需要升级数据库。您将对 SQLiteOpenHelper 类进行更改,因此您需要发布应用程序的新版本。此新版本将在应用安装(升级)后与现有数据库一起使用。
  • 它没有显示,我试过了,它只在我使用旧项目但新项目没有创建时显示。
  • @forpas 有哪些变化?请帮忙。提前谢谢你。
  • 你说你会改变一个方法。如果它已经发布,这将导致您的应用程序的新版本。如果它没有被释放,那么你没有什么可担心的。在任何情况下,如果您不更改数据库的架构,则不需要数据库升级。

标签: java android sql database sqlite


【解决方案1】:

我相信您的问题是插入项目的调用在 onCreate 方法中。 onCreate 方法只会在创建数据库时自动运行一次。所以代码/行insertItems(db); 只会运行一次。

您可以使用 onUpgrade 执行 insertItems,注意代码应检查版本是否从 1 更改为 2。在这种情况下,您可以:-

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
        insertItems(db);
    }
    // The database is still at version 1, so there's nothing to do be done here.
}

同时将版本更改为 2。

  • 这假设
    • insertItems 不会添加重复项,
    • onUpgrade 方法不会在版本从 1 更改为 2 时删除表并调用 onCreate

就个人而言,在这个阶段,只需卸载应用程序并重新运行就足够了(假设新项目已添加到插入代码中,而不是替换插入代码,并且其他现有数据(如果有)可能会丢失或将重新创建)。

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 2012-11-22
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多