android - 如何在 Room Db 中插入重复行?
问题描述
在搜索这个时,我只遇到有人问如何避免使用房间数据库插入重复的行。但是我的应用程序有一个功能,用户可以点击复制按钮,列表项将再次插入到数据库中。如果我的表没有在其中一个字段上设置主键,我本可以简单地实现这一点。 虽然我为 SQLite 找到了这个解决方案,但我不知道如何在 Room Db 中实现这一点。因为在房间中编写带有自定义查询的插入查询时,首先会破坏使用房间的目的。
解决方案
假设你有一些实体
@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。您的主键是自动生成的,您必须将其设置为默认值才能获得新的自动生成的:
copiedValue.id = 0 yourDao.insert(copiedValue)
情景 2。您的主键不是自动生成的,您必须手动设置新的主键:
copiedValue.id = ... // some code to set new unique id yourDao.insert(copiedValue)
推荐阅读
- javascript - React 将数据从前端传递到后端节点
- python - 从变量访问函数是否更高效?
- controller - Alicat SerialTerminal 无符号设定点
- c++ - 什么样的数据分布可以使一个数字出现在不同范围内的频率发生很大变化?
- python - ffmpeg VS opencv有什么不同的视频分割?
- reactjs - NextJS 动态 SEO 元标记在 Facebook、Twitter 等社交网站上给出 500 个内部错误
- react-native - 世博会上是否有对讲机的替代品反应原生?
- relative-path - bash 中是否有用于“..”的 QMake 模拟?
- javascript - 将用户 UID 发送到 Firebase 云功能是否安全
- vb.net - 使图表控件的网格在偶数小时开始