【问题标题】:How do I check if there's a certain item in database when using Room in Android?在Android中使用Room时如何检查数据库中是否有某个项目?
【发布时间】:2020-06-20 11:19:27
【问题描述】:
@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) {
    ...
}

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

【问题讨论】:

    标签: android android-studio kotlin android-room android-database


    【解决方案1】:

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

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

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

    val exists = dao.exists(id)
    

    【讨论】:

    • 我们如何检查主线程?因为数据库相关的查询我们不能在主线程上命中。我已经使用了相同的协程,但是第一次它没有给我正确的结果,第二次之后工作正常。
    猜你喜欢
    • 2021-02-12
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多