向 sqlite 添加新的 table

Adding new table to sqlite

对于 SQLiteOpenHelper,如果我在 onCreate 中添加一个新的 table,我是否必须在 onUpgrade 中做任何事情?我正在添加一个全新的 table。我相信我必须更改版本号,但 onUpgrade 应该保持为空。对吗?

如果您希望应用程序的现有安装添加这个新的 table,那么是的,您必须增加版本并提供 suitable onUpgrade() 实现,以及在 onCreate() 中添加 table (你说你已经完成了)。

一个空的 onUpgrade() 实现是不够的;它必须实际做一些事情。有些人删除所有 table 并直接调用 onCreate(),但如果您试图保留现有数据,这显然效果不佳。我通常使用 fall-through switch 习惯用法,这样如果用户落后一个以上的版本(例如,你发布了版本 3 而用户仍在版本 1),他们将按顺序完成所有必要的升级:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    switch (oldVersion) {
        case 1:
            db.execSQL("CREATE TABLE " + ...);
            // no break statement, so case 2 will execute after this.
        case 2:
            // more execSQL(), etc
    }
}

仅当您增加版本号时才会调用 onUpgrade。

要实现它,您必须使用所做的任何更改重新创建表并复制任何现有数据。有很多关于这个主题的教程。

如果您仍在学习,则没有必要实施,但如果您不这样做并且对架构进行了任何更改,则需要从设备上卸载该应用,否则更改将不会应用.

如果用户之前已经安装了您的应用程序,则不会调用

onCreate()。因此,您还需要在 onUpgrade() 中创建新的 table。请务必增加数据库的版本号。

我建议将创建 table 的代码放在辅助方法中,以便您可以从两个回调方法中调用它。如果您需要更改代码以创建 table.

,这将减少出错的可能性