android - DAO:如何使用 Insert 的返回值

标签 android database kotlin android-room dao

根据 the documentation @Insert 函数可以返回一个long,这是插入项的新rowId。如何使用返回值?

@Dao
interface TodoDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
        fun insert(todo: TodoItem): Long
}

请注意,我的 @Entityid 是自动生成的。

@PrimaryKey(autoGenerate = true)

这是整个 TodoItem 实体。

@Entity(tableName = "todos")
@Parcelize
data class TodoItem(val text: String, val priority: Priority) : Parcelable {
    @PrimaryKey(autoGenerate = true)
    var todoId: Long = 0
}

最佳答案

如果 id onTodoItem 是一个var,您可以将返回值分配给id`,所以现在您的实体已经生成了主 key ,用于 future 的 DAO 操作。


如果您要使用@Parcelize,请确保所有基本属性都在数据类 构造函数中。就目前而言,您的 todoId 属性不会被放入 Parcel 中。

@Entity(tableName = "todos")
@Parcelize
data class TodoItem(
    val text: String,
    val priority: Priority,
    @PrimaryKey(autoGenerate = true) var todoId: Long = 0
) : Parcelable

然后,给定一个名为 entity 的实体和一个名为 dao 的 DAO:

entity.todoId = dao.insert(entity)

关于android - DAO:如何使用 Insert 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59023029/

相关文章:

java - Spinner 获取其项目值(而不是位置)

Android:无损WEBP压缩

c# - 仅使用一个 dbContext 对多个数据库执行投影

mysql - SQLite 和 VARCHAR - 换行符

java - 在 UBUNTU 中从 VS Code 运行 Kotlin 会得到 kotlinc : not found

Android Kotlin 从一个模块引用或导入库类到另一个模块

android - 分析当前播放轨道的波形数据

java - Android多实例Activity

c# - mysql存储过程insert语句 "22-12-2010"修改日期格式为 "2010-12-22"

android - 关闭键盘时取消对 EditText 的关注