[英]Why Room remove my database after migration
我想在数据库中创建新表。 迁移应用程序删除数据库中的所有项目后。 为什么? 我没有使用fallbackToDestructiveMigration()
我的代码:
public class DatabaseClient {
private static DatabaseClient mInstance;
private DatabaseApp databaseApp;
private DatabaseClient(Context context) {
appDatabase = Room.databaseBuilder(context, DatabaseApp.class, "DB_NAME").build();
appDatabase = Room.databaseBuilder(context, DatabaseApp.class, "DB_NAME").addMigrations(MIGRATION_1_2).build();
}
public static synchronized DatabaseClient getInstance(Context mCtx) {
if (mInstance == null)
mInstance = new DatabaseClient(mCtx);
return mInstance;
}
public AppDatabase getAppDatabase() {
return appDatabase;
}
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(@NonNull final SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE `MarkRead` (`Id` INTEGER, `StudentId` TEXT," +
"`StudentName` TEXT, `MarkId` INTEGER,`Mark` TEXT, PRIMARY KEY(`Id`))");
}
};
}
我究竟做错了什么?
这是因为您的旧数据尚未移动到新表中。
您必须执行以下步骤:
CREATE TABLE TEMP (... put your columns here)
通过编写“SELECT *”查询从现有表中获取结果。
将上一个查询的结果插入到 Temp 表中。
INSERT INTO TEMP SELECT .... FROM ORIGINAL
DROP TABLE ORIGINAL
ALTER TABLE TEMP RENAME TO ORIGINAL
现在您将拥有一个具有相同名称和数据的新表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.