首页 > 解决方案 > 如何在 Room Db 中插入重复行?

问题描述

在搜索这个时,我只遇到有人问如何避免使用房间数据库插入重复的行。但是我的应用程序有一个功能,用户可以点击复制按钮,列表项将再次插入到数据库中。如果我的表没有在其中一个字段上设置主键,我本可以简单地实现这一点。 虽然我为 SQLite 找到了这个解决方案,但我不知道如何在 Room Db 中实现这一点。因为在房间中编写带有自定义查询的插入查询时,首先会破坏使用房间的目的。

标签: androidsqliteandroid-sqliteandroid-room

解决方案


假设你有一些实体

@Entity(tableName = "foo_table")
data class Foo (
    @PrimaryKey(autoGenerate = true) var id: Int,
    // or without autogeneration
    // @PrimaryKey var id: Int = 0,
    var bar:String
)

你有一些带有插入的道:

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(foo: Foo)

然后复制您现有的值(copiedValue: Foo),您需要以某种方式管理您的主键:

  1. 情景 1。您的主键是自动生成的,您必须将其设置为默认值才能获得新的自动生成的:

    copiedValue.id = 0 yourDao.insert(copiedValue)

  2. 情景 2。您的主键不是自动生成的,您必须手动设置新的主键:

    copiedValue.id = ... // some code to set new unique id yourDao.insert(copiedValue)


推荐阅读