如何在不提供ID的情况下自动生成Room数据库ID

时间:2019-11-17 13:33:13

标签: android sqlite android-room android-architecture-components

我正在尝试创建一个房间数据库,但我希望插入其中的每个项目都具有自己的唯一ID,而无需我提供它,问题是当我尝试将新项目插入数据库时​​,出现错误提示我要提供一个ID。

这是我的实体:

    @Entity(tableName = "notes_table")
    data class Note(

    @PrimaryKey(autoGenerate = true)
    val id: Int = 0,

    @ColumnInfo(name = "description")
    val description: String,

    @ColumnInfo(name = "priority")
    var priority: Int)

有没有一种方法可以让数据库创建自己的自动生成的自动增加的id列,而无需我像这样添加它:

    val item = Note(id, item, priority)
    insert(item)

而是这样做:

    val item = Note(item, priority)
    insert(item)

3 个答案:

答案 0 :(得分:2)

您只需为id提供一个默认值,然后将其放在最后:

@Entity(tableName = "notes_table")
data class Note(

    @ColumnInfo(name = "description")
    val description: String,

    @ColumnInfo(name = "priority")
    var priority: Int)

    @PrimaryKey(autoGenerate = true)    //must be at the end
    val id: Int = 0                     //Long type recommend
)

然后您可以:

val item = Note(item, priority)
insert(item)

答案 1 :(得分:1)

创建一个以constructoritem作为参数的priority

@Entity(tableName = "notes_table")
data class Note (var item: String,
        @ColumnInfo(name = "priority") 
        var priority: String) {
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0,
    //.....
}

答案 2 :(得分:0)

因为数据类super()具有三个参数。

因此,您必须通过传递三个参数来创建Note

与自动生成或空间无关。