Aan*_*hta 16 android kotlin android-room
我正在使用 Room 数据库并尝试插入项目列表(例如,在我的案例中包含作者姓名和引用的引用列表)。
以下是我正在使用的代码:
// view model
BaseApp.daoInstance?.appDao()?.insertQuotes(response!!)
// dao
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertQuotes(listData: MutableList<Quote>)
Run Code Online (Sandbox Code Playgroud)
当我再次尝试插入相同的数据时,它总是作为新数据插入而不是替换为当前项目。
我为此OnConflictStrategy.REPLACE研究了很多,但找不到任何正确的答案。
有没有人面临同样的问题并找到解决方案,或者我做错了什么?
先感谢您...!!!
Ita*_*bel 12
房间,如果您在数据库中已经有报价,将不会检查和比较。它会做的是查看主键是否已经存在于数据库中,如果存在,Room 将用新数据替换所有旧数据。
在您的情况下,您没有指定 ID,因此数据库会为您生成一个唯一的 ID。您应该做的是创建一个Query将在数据库中搜索此引号的内容,如下所示:
@Query("SELECT * from quote_table WHERE author = :author AND quote = :quote")
List<Quote> getQuoteByAuthorAndQuote(string author, string quote);
Run Code Online (Sandbox Code Playgroud)
如果找到,这应该返回一个带单引号的列表,如果不存在则返回空。
如果您想覆盖旧的,只需更新 Quote POJO 中的数据并使用 Room 将其插入数据库。
| 归档时间: |
|
| 查看次数: |
10194 次 |
| 最近记录: |