如何迁移房间数据库添加日期列



我有一个简单的数据库,有一个表(id、title和description(,我想添加一列来存储决斗日期。我使用我在开发者android迁移和TypeConverters中找到的信息来迁移它,我可以安装来测试,但它不会打开应用程序。我愿意接受任何帮助!

我的实体


@Entity(tableName = "todo_db")
public class todoEnt {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo(name = "title")
public String todoTitle;
@ColumnInfo(name = "description")
public String todoDescription;
@ColumnInfo(name = "dueDate")
public Date dueDate;
}

我有一个类型转换器

public class Convertors {
@TypeConverter
public static Date fromTimeStamp(Long value){
return value == null ? null : new Date(value);
}
@TypeConverter
public static Long dateToTimestamp(Date date){
if (date == null) {
return null;
} else {
return date.getTime();
}
}
}

我把它添加到我的数据库文件中

@TypeConverters({Convertors.class})
static final Migration M_1_2 = new Migration(1, 2) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE todo_db ADD duedate INTEGER");
}
};
INSTANCE = Room.databaseBuilder(
context.getApplicationContext(),
TDAHdb.class,
"tdah_database")
.addMigrations(M_1_2)
.allowMainThreadQueries()
.build();

对于Room迁移,表和列名区分大小写。在迁移中更改duedate以匹配实体定义中指定的@ColumnInfo名称的大小写dueDate:

database.execSQL("ALTER TABLE todo_db ADD dueDate INTEGER");

最新更新