"无法添加NOT NULL列,默认值为NULL"自动数据库迁移后使用Requery

时间:2018-02-19 17:15:34

标签: android

我通过添加如下所示的整数字段来更新我的AbstractFooEntity类,并且我碰到了数据库版本(数据库初始化为new DatabaseSource(context, Models.DEFAULT, DB_VERSION)

@Entity
abstract class AbstractFooEntity {
  // this was in DB schema v1
  String someField;

  // added in DB schema v2
  int newField = 0;
}

当我部署此代码并执行(自动)数据库迁移时,我在运行时收到以下错误:"Cannot add a NOT NULL column with default value NULL"

注释实体的正确方法是什么,以便框架在此方案中正确处理自动数据库迁移?

2 个答案:

答案 0 :(得分:1)

有两个选项,第一个可能是首选 - 在第二个选项中,您需要在代码中处理可能的nullpoin:

选项1

@Entity
abstract class AbstractFooEntity {
  ...
  @Column(value = "0")
  int newField;
}

选项2

@Entity
abstract class AbstractFooEntity {
  ...
  Integer newField;
}

答案 1 :(得分:1)

我找到了解决方案。

database.execSQL("ALTER TABLE table_name ADD COLUMN colum_name INTEGER DEFAULT 1 not null");

在数据类型后添加命令:“默认值”即可解决您的问题。