如何迁移添加“日期”列的会议室数据库?

时间:2020-07-29 22:31:02

标签: java android android-room typeconverter

我有一个简单的数据库,有一个表(ID,标题和描述),我想添加一列以存储截止日期。我使用在Developer android migrationTypeConverters中找到的信息进行迁移,可以安装进行测试,但无法打开应用程序。 我将不胜感激!

我的实体


@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;

}

我有一个Typeconverter

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();

1 个答案:

答案 0 :(得分:0)

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

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