【问题标题】:How to find out if a record already exists in a room database如何找出房间数据库中是否已存在记录
【发布时间】:2019-01-16 06:18:04
【问题描述】:

我从 sql db 搬到了房间。我不知道如何检查数据库中是否存在项目。 如何使用 Room 编写这段代码?

fun existsCheck(place: Places): Boolean {
    val db= this.readableDatabase
    val query = "SELECT * FROM $TABLE_PLACES WHERE $COLUMN_LAT = ${place.lat} AND $COLUMN_LNG = ${place.lng}"
    val cursor = db.rawQuery(query, null)
    if(cursor.count > 0){
        cursor.close()
        db.close()
        return true
    }
    cursor.close()
    db.close()
    return false
}

我试图用这段代码来实现这一点,但总是返回 FALSE

@Query("SELECT name FROM place WHERE lat = :lat AND lng = :lng")
fun exist(lat: Double?, lng: Double?): Flowable<String>

override fun save() {
    Observable.just(dao)
            .subscribeOn(Schedulers.io())
            .subscribe {  dao.insert(place) }
}

override fun itemExists(lat: Double?, lng: Double?): Single<Boolean> =
        dao.exist(lat, lng)
                .flatMapSingle { Single.just(it.isNotEmpty()) }
                .onErrorReturn { false }
                .first(false)



override fun delete() {
    dao.deleteByLat(place.lat)
}

override fun saveClicked() {
    var boolean = false
     itemExists(place.lat, place.lng)
             .subscribeOn(Schedulers.io())
             .map { it -> boolean = it }
    if (boolean){
        delete()
        v.setImageNotSaved()
    } else {
        save()
        v.setImageSaved()
    }

}

【问题讨论】:

标签: java kotlin android-room


【解决方案1】:

这很好用

 override fun itemExists() {
         Observable.just(dao)
                .subscribeOn(Schedulers.io())
                .subscribeOn(AndroidSchedulers.mainThread())
                 .map { it -> it.exist(place.lat, place.lng) }
                .subscribe( { it -> saveClicked(true) },
                        {error -> saveClicked(false)})
    }

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多