java - 如何迁移添加日期列的房间数据库?
问题描述
我有一个简单的数据库,有一个表(id、title 和 description),我想添加一列来存储到期日期。我使用在 Developer android migration和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");
推荐阅读
- java - GridBagLayout 和 JButton
- python - How to break cycle after a specific number of iterations in itertools?
- python - 如何合并这两个数据框?
- arrays - 我如何将 useState 从使用数组放置重新分配给他们的 id?
- html - 如何在 Angular 组件中定位 Div
- r - R 文件上传的闪亮运行功能
- sql - 在 postgres 中以高性能方式获取最大值和相应的列
- html - 背景颜色滑块
- unit-testing - 在CDK测试中,toHaveResource和toHaveResourceLike有什么区别?
- python-3.x - Python 日志记录;[1] 无法设置日志文件目录路径;和 [2] 日期时间格式问题