Ava*_*rya 4 android android-room
如何删除房间数据库android.DROp的下一版本中的列或删除不起作用?
@Database(entities = {User.class, AdTime.class}, version = 1, exportSchema = false)
public abstract class AppDataBase extends RoomDatabase {
private static AppDataBase INSTANCE;
public abstract UserDao userModel();
public abstract AdDao adModel();
public static AppDataBase getInMemoryDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context, AppDataBase.class, "adrider")
// To simplify the codelab, allow queries on the main thread.
// Don't do this on a real app! See PersistenceBasicSample for an example.
.allowMainThreadQueries()
// .addMigrations(MIGRATION_1_2)
// .fallbackToDestructiveMigration()
.build();
}
return INSTANCE;
}
static final Migration MIGRATION_1_2=new Migration(1,2) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE User "
+ "DROP Download");
}
};
}
Run Code Online (Sandbox Code Playgroud)
原理应该还是一样的,因为你在 Room 下使用 SQLite。因此,您应该能够发出该链接中描述的相同 SQL 语句。你有没有尝试过?
database.execSQL("CREATE TABLE t1_backup AS SELECT a, b FROM t1");
database.execSQL("DROP TABLE t1");
database.execSQL("ALTER TABLE t1_backup RENAME TO t1");
Run Code Online (Sandbox Code Playgroud)
显然更改表名和列名以适合您的方案。
您必须执行4个步骤:1.创建新表2.复制数据3.删除旧表4.将表名更改为正确的表名
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// Create the new table
database.execSQL(
"CREATE TABLE users_new (userid TEXT, username TEXT, last_update INTEGER,
PRIMARY KEY(userid))");
// Copy the data
database.execSQL(
"INSERT INTO users_new (userid, username, last_update) SELECT userid,
username, last_update FROM users");
// Remove the old table
database.execSQL("DROP TABLE users");
// Change the table name to the correct one
database.execSQL("ALTER TABLE users_new RENAME TO users");
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3182 次 |
| 最近记录: |