在Android中使用Room时如何检查数据库中是否存在某个项目?

Jae*_*ung 4 android kotlin android-studio android-database android-room

@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)
}

Run Code Online (Sandbox Code Playgroud)

当我尝试使用下面的行检查数据库中是否存在某一行时

val exists = dao.get(id).value != null
if (exists) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

Gle*_*val 15

我会通过进行另一个查询来做到这一点,如果该项目存在则返回 true,否则返回 false。

@Query("SELECT EXISTS (SELECT 1 FROM example_table WHERE id = :id)")
fun exists(id: Int): Boolean
Run Code Online (Sandbox Code Playgroud)

并像这样调用它,这样您就不需要检查它是否为空:

val exists = dao.exists(id)
Run Code Online (Sandbox Code Playgroud)