自动数据库迁移后使用重新查询“无法添加默认值为 NULL 的 NOT NULL 列”

jak*_*b.g 10 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;
}
Run Code Online (Sandbox Code Playgroud)

当我部署此代码并在用户运行新版本的 Android 应用程序时执行(自动)数据库迁移时,我在运行时收到以下错误:"Cannot add a NOT NULL column with default value NULL".

在这种情况下,注释实体以便框架正确处理自动数据库迁移的正确方法是什么?

Tăn*_*Tài 13

我找到了解决方案。

database.execSQL("ALTER TABLE table_name ADD COLUMN colum_name INTEGER DEFAULT 1 not null");
Run Code Online (Sandbox Code Playgroud)

在数据类型后添加命令:“DEFAUT value”将解决您的问题。


jak*_*b.g 3

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

选项1

@Entity
abstract class AbstractFooEntity {
  ...
  @Column(value = "0")
  int newField;
}
Run Code Online (Sandbox Code Playgroud)

选项2

@Entity
abstract class AbstractFooEntity {
  ...
  Integer newField;
}
Run Code Online (Sandbox Code Playgroud)