8

我正在关注本教程。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,升级数据库意味着什么?

重要的

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

提前致谢。

4

5 回答 5

10

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

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

于 2013-03-27T19:46:41.393 回答
5

升级意味着对数据库模式进行了更改(版本号不同),需要升级。删除表格并重新创建是一种方法。您还可以发出“alter table”语句。

于 2013-03-27T19:44:49.163 回答
3

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

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

于 2013-03-27T19:42:58.283 回答
1

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

于 2015-01-28T11:15:41.677 回答
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)我们删除表并重新创建,因为修改表(例如添加适合新功能的新列)的逻辑方式可能是,在“销毁”/删除表然后创建一个新表之前与所有数据。但这可能不是可行的方法,尽管重新创建数据可能意味着 id 编号将是连续的(通常不连续:您可能有 1、2 和..4,因为 3 已被删除),因此删除然后再次创建表,并最终加载以前的数据,您可以具有此 id 一致性。有时您可能想使用 ALTER 而不是 DROP。为什么?通常因为使用 DROP 用户会丢失数据库中已有的内容,回复

于 2016-06-19T20:04:42.913 回答