在使用Android中的Room时,如何检查数据库中是否存在特定项目?

9
@Dao
interface ExampleDao {

    @Query("SELECT * FROM example_table WHERE id = :id")
    fun get(id: Int): LiveData<Example>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(something: Example)
}

当我使用下面的语句尝试检查数据库中是否存在特定行时

val exists = dao.get(id).value != null
if (exists) {
    ...
}

存在的变量始终返回null 我知道数据库中已经有这行数据并且UI正确显示了信息。为什么它总是返回null,我应该如何检查是否在房间数据库中有这行数据?

1个回答

21

我会通过创建另一个查询来完成,如果该项存在,则返回true,否则返回false。

@Query("SELECT EXISTS (SELECT 1 FROM example_table WHERE id = :id)")
fun exists(id: Int): Boolean

这样调用它,就不需要检查它是否为 null:

val exists = dao.exists(id)

我们如何在主线程上进行检查?因为与数据库相关的查询不能在主线程上执行。我已经使用了协程来解决这个问题,但是第一次运行时结果不正确,从第二次开始就正常工作了。 - Menu
@菜单 你可以使用协程来实现这个目的。将你的代码放到viewModelScope.launch{..}或任何其他作用域中。 - Syyam Noor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接