当前位置: 首页 > 知识库问答 >
问题:

如何查找房间数据库中是否已存在记录

魏威
2023-03-14

我从sql db移到了Room。我不知道如何检查数据库中是否存在项目。如何使用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()
    }

}

共有1个答案

沈巴英
2023-03-14

这个很好用

 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)})
    }
 类似资料:
  • 问题内容: 将编辑后的数据保存在猫鼬中之前如何进行验证? 例如,如果数据库中已经存在,用户将收到某种错误,类似的错误,这是我的以下代码 问题答案: 通常,您可以使用猫鼬验证,但由于需要异步结果(对现有名称的db查询)并且验证器不支持promise(据我所知),因此需要创建自己的函数并传递回调。这是一个例子: 更新:更好的方法 前置钩似乎是停止保存的更自然的地方: 更新2:异步自定义验证器 看起来猫

  • 问题内容: 我正在尝试根据特定的ID查询数据库。 如果这是第一次运行该活动,则该表将与id列一起存在,但是将不存在具有特定id的记录。如何检查该特定记录是否存在,如果不存在,则添加它?我发现有关检查特定列是否存在的很多信息,但与检查特定记录是否存在无关。 到目前为止,我已经尝试获取id列索引并检查它是否返回-1,但是由于某种原因,它实际上正在返回1。我可以在if语句中使用什么来验证尚未创建id列?

  • 问题内容: 建立连接后是否可以检查(MySQL)数据库是否存在。 我知道如何检查数据库中是否存在表,但是我需要检查数据库是否存在。如果没有,我必须调用另一段代码来创建它并填充它。 我知道所有这些听起来都不太优雅-这是一个快速又肮脏的应用程序。 问题答案: 如果您只想知道数据库是否存在,以免在尝试创建数据库时出错,只需使用(From here):

  • 我是新来的和我试图我的得到一个从它。我试图这样做的它与这是id但问题是我不知道如何返回目标从。 这就是<代码>刀 这是Repository类

  • 问题内容: 无法让Firebase识别已经输入的用户名。下面的代码显示我正在尝试将输入的用户名与数据库的DataSnapshot进行比较。该代码似乎没有拾取输入的用户名。代码是否错误? 在按钮上单击,我希望能够将用户引导到该错误,并且在该错误唯一之前,不应将该页面推送到下一个活动。 JSON树(如果有帮助) 问题答案: 是异步操作。设置回调后,代码将继续运行,而您尚未获取任何用户名。到您检查mSw

  • 我尝试在Android房间中附加数据库,如下所示:如何从Android房间中的多个数据库中进行选择(如何附加数据库),但在构建项目时出现错误:错误:查询有问题:[SQLITE\u错误]SQL错误或缺少数据库(没有这样的表:database.table)错误 当我添加@SkipQuery验证时,错误发生了变化:错误:不确定如何将游标转换为此方法的返回类型。 当我从查询中删除“myDatabase.”