gpt4 book ai didi

Android Room notNull 字段需要一个 null 默认值

转载 作者:行者123 更新时间:2023-12-05 00:18:05 25 4
gpt4 key购买 nike

我正在尝试向我的表中添加新属性,如下所示:


@Entity(
tableName = "invoices", indices = [Index(value = [...], unique = true)]
)
data class Invoice(
...
override val created_at: Long = 0,
override var approved_at: Long? = 0,
) : ICD
所以我创建了以下迁移:
val MIGRATION_3_4 = object: Migration(3, 4) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE invoices ADD COLUMN created_at INTEGER NOT NULL DEFAULT 0")
database.execSQL("ALTER TABLE invoices ADD COLUMN approved_at INTEGER DEFAULT 0 ")
}
}
但是每当我尝试运行它时,它都会说迁移没有正确处理并按预期显示:
TableInfo{name='invoices', columns={... ,created_at=Column{name='created_at', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, approved_at=Column{name='approved_at', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, ... }

这是什么发现:
TableInfo{name='invoices', columns={... ,created_at=Column{name='created_at', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='0'}, approved_at=Column{name='approved_at', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='0'}}, ... }

谁能告诉我为什么它期望默认值 null 吗?

最佳答案

我相信,您使用的 Room 版本大于 2.2.0 , 和版本 2.2.0及以上需要使用 @ColumnInfo(defaultValue="0") 在各自的实体类中定义列的默认值
对于您的情况,请添加 @ColumnInfo(defaultValue="0")created_atapproved_at

@ColumnInfo(defaultValue="0")
override val created_at: Long = 0,
@ColumnInfo(defaultValue="0")
override var approved_at: Long? = 0,
并将您的迁移功能更改为此
database.execSQL("ALTER TABLE invoices ADD COLUMN created_at INTEGER NOT NULL DEFAULT 0")
database.execSQL("ALTER TABLE invoices ADD COLUMN approved_at INTEGER")
如果您使用的是 Room 版本 2.4.0-alpha01及更高版本,您可以使用 autoMigration .
对于 autoMigration , 添加 autoMigrations注释到您的数据库
@Database(
entities = [.., .., ..],
version = 2,
autoMigrations = [AutoMigration(from = 1, to = 2)]
)
abastract class Database: RoomDatabase

关于Android Room notNull 字段需要一个 null 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69565907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com