Android &引用;无法添加默认值为NULL的NOT NULL列";在自动数据库迁移后使用重新查询

Android &引用;无法添加默认值为NULL的NOT NULL列";在自动数据库迁移后使用重新查询,android,Android,我更新了我的AbstractFooEntity类,添加了一个整数字段,如下所示,我升级了DB版本(DB是用new DatabaseSource(context,Models.DEFAULT,DB\u version)初始化的) @实体 抽象类抽象实体{ //这是在DB模式v1中 字符串字段; //添加到数据库模式v2中 int newField=0; } 当我部署此代码并在用户运行新版Android应用程序时执行(自动)DB迁移时,我在运行时遇到以下错误:“无法添加默认值为NULL的非NULL

我更新了我的
AbstractFooEntity
类,添加了一个整数字段,如下所示,我升级了DB版本(DB是用
new DatabaseSource(context,Models.DEFAULT,DB\u version)初始化的)

@实体
抽象类抽象实体{
//这是在DB模式v1中
字符串字段;
//添加到数据库模式v2中
int newField=0;
}
当我部署此代码并在用户运行新版Android应用程序时执行(自动)DB迁移时,我在运行时遇到以下错误:
“无法添加默认值为NULL的非NULL列”


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

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

选项1

@实体
抽象类抽象实体{
...
@列(value=“0”)
纽菲尔德国际酒店;
}
选项2

@实体
抽象类抽象实体{
...
整数纽菲尔德;
}

我找到了解决办法

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

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

您是如何找到选项1的注释
@列的
的?这是为表列设置默认值的当前解决方案:
int newField=SOME_value;
在迁移时对我不起作用。可能它只对新创建的表有效?我检查了生成的code、 而且它在任何地方都没有看到
某些值
。我只是通过探索示例代码和文档找到了
@Column
解决方案。设置
DEFAULT 1
解决了允许属性设置为
NOT NULL
的问题,为Android Room数据库添加了一个布尔列。