将新表添加到sqlite

时间:2016-09-16 23:04:48

标签: android sqlite android-contentprovider

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

3 个答案:

答案 0 :(得分:2)

如果您希望应用的现有安装添加此新表,那么您必须增加版本并提供合适的onUpgrade()实施,并在onCreate()中添加表格(你说你已经完成了)。

onUpgrade()实施是不够的;它必须真正做点什么。有些人会删除所有表格并直接调用onCreate(),但如果您尝试保留现有数据,这显然效果不佳。我通常使用直播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
    }
}

答案 1 :(得分:1)

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

onCreate()。所以你需要在onUpgrade()中创建新表。请务必增加数据库的版本号。

我建议将代码放在一个帮助器方法中创建表,以便您可以从两个回调方法中调用它。如果您需要更改代码以创建表,这将减少出错的可能性。

答案 2 :(得分:0)

只有在增加版本号时才会调用

onUpgrade。

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

如果您还在学习,则没有必要实施,但如果您没有对架构进行任何更改,则需要从设备上卸载应用程序或获得更改#39不适用。