为什么我们需要onUpgrade(); SQLiteOpenHelper类中的方法

时间:2013-03-27 19:41:16

标签: android database sqlite android-sqlite sqliteopenhelper

我正在学习本教程。http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

任何人都可以让我清楚这段代码。

 // Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
            + KEY_PH_NO + " TEXT" + ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

    // Create tables again
    onCreate(db);
}

问题

onUpgrade();方法的目的是什么?

什么时候打电话?正如文档所说this is Called when the database needs to be upgraded升级数据库意味着什么?

重要

为什么我们在这个方法中删除表并重新创建?

提前致谢。

5 个答案:

答案 0 :(得分:9)

onUpgrade基本上用于处理任何新版本应用的新数据库更改(可能是新列添加,表添加)。

在onUpgrade中并不总是需要删除表,这取决于你的用例。如果要求不要保留旧版本应用程序中的数据,那么drop应该会有所帮助,但是如果它像更改架构那样它应该只有更改脚本。

答案 1 :(得分:5)

升级意味着已对数据库架构进行了更改(版本号不同),并且需要进行升级。删除表并重新创建是一种方法。您还可以发出"alter table"条款。

答案 2 :(得分:3)

当您打开数据库时,它会检查版本号以及它是否存在。您只需“升级”数据库而不是创建新数据库。

一个好的教程:http://www.vogella.com/articles/AndroidSQLite/article.html

答案 3 :(得分:1)

更新数据库版本时会调用此方法。它会删除现有表,并在再次调用onCreate方法时再次创建它。

答案 4 :(得分:1)

回复你的4个问题:

1) onUpgrade的目的是管理新的数据库结构。您可以使用简单的功能启动应用程序,然后您需要添加一个新列,因此您需要将数据库的版本从1增加到2并在onUpgrade中 提供添加新列的说明,以便在用户更新应用时,添加新列。

2) 当您拥有新版本的数据库并且在super方法中增加int数时,将调用onUpgrade(此处为1,因此您最终会更改它到2)

 public static class DatabaseHelper extends SQLiteOpenHelper{
    DatabaseHelper(Context context){
        super (context,DATABASE_NAME,null,1);
    }

3) 请参阅上文,了解更新数据库的含义

4) 我们删除表并重新创建,因为要修改表(添加适合新功能的新列的示例),一种逻辑方式可以继续之前,“破坏”/ DROP表,然后创建一个包含所有数据的新表。但这可能不是要走的路,虽然重新创建数据可能意味着id号将是连续的(通常不是连续的:你可能有1,2和4因为3已被删除),因此丢弃然后再次创建表,并最终加载以前的数据,您可以具有此id一致性。 有时您可能希望使用ALTER而不是DROP。为什么?通常因为使用DROP,用户会丢失数据库中已有的内容,那么如果您想了解有关最佳实践和更复杂的现实生活场景的更多信息,请查看这个惊人的reply