调用onUpgrade时数据是否会丢失

时间:2013-09-27 17:23:10

标签: android database sqlite

我创建了DatabaseHelper以使我的开发更容易。如果我的数据库版本从1升级到2,则将调用onUpgrade并删除表。我想知道这会导致我存储在表中的数据也掉线了吗?我的意思是,我会丢失存储在表格中的数据吗?

这是代码。

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS notes");
        onCreate(db);
    }
}

3 个答案:

答案 0 :(得分:2)

当您删除表格时,它的所有数据也会被删除。如果要保留它,请先重命名表,创建新表,然后从旧表中选择新数据。

答案 1 :(得分:2)

通过查看您的代码,是,您将丢失 数据库 的当前表格和新的空表notes将被创建。

因此,升级数据库的最佳方法是:

  db.execSQL("DROP TABLE IF EXISTS notes");

声明,您应该备份当前数据库(最简单的方法是重命名表),然后删除当前表以创建新表。

在编辑/升级信息之前保留信息备份始终是一种很好的编程习惯。

答案 2 :(得分:0)

如果coloumn中有更改,您可以在onUpgrade方法中更改表。如果你想制作新表,那么只在onUpgrade中调用Drop,如果模式没有变化,则不要在onUpgrade方法中做任何事情。