0

我创建了 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);
    }
}
4

3 回答 3

2

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

于 2013-09-27T17:25:50.530 回答
2

通过查看您的代码,是的,您将丢失数据库的当前表,并且notes将创建一个新的空表。

所以升级数据库的最好方法是在此之前:

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

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

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

于 2013-09-27T17:25:58.407 回答
0

如果列有变化,您可以在 onUpgrade 方法中更改表。如果要创建新表,则仅在 onUpgrade 内调用 Drop,如果架构没有更改,则不要在 onUpgrade 方法内执行任何操作。

于 2013-09-27T17:37:58.133 回答