gpt4 book ai didi

android - 房间数据库插入或更新但保留数据库字段?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:40:48 25 4
gpt4 key购买 nike

我正在尝试实现以下场景 -> 从 API 获取记录并存储到数据库中。某些记录可能会被点击为收藏,即使从 API 获取新数据,它们也应该保持这种状态。但是,我似乎找不到如何在不替换整行的情况下不替换那些已经被选为 favorite 的记录的方法。我试过一条一条地插入记录,并以某种方式在插入检查记录是否已经存在,但我似乎无法使用 RxJava 弄清楚。

    @Dao
interface KafanaDao {

@Insert
fun insertSingleKafana(kafana: Kafana)

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAll(kafani: List<Kafana>)

@Query("SELECT * FROM ${Constants.KAFANI_TABLE_NAME}")
fun getKafani(): Single<List<Kafana>>

@Query("SELECT * FROM ${Constants.KAFANI_TABLE_NAME} WHERE name = :name")
fun getSingleKafana(name: String): Single<Kafana>

@Query("UPDATE ${Constants.KAFANI_TABLE_NAME} SET isFavorite = :isFavorite WHERE name = :name")
fun setFavourite(name: String, isFavorite: Int)
}

然后我一直一条一条插入记录,但是如何检查它们是否已经存储在数据库中?

fun insertSingleKafanaInDb(kafana: Kafana) {
Observable.fromCallable { kafanaDao.insertSingleKafana(kafana) }
.subscribeOn(Schedulers.io())
.subscribe {
Timber.d("Inserted ${kafana.name} kafani from API in DB...")
}
}

fun getKafaniFromApi(): Observable<List<Kafana>> {
return apiService.getKafani().toObservable().doOnNext {
for (kafana in it) {
//I need to somehow do the check here
insertSingleKafanaInDb(kafana)
}
}
}

实体

    @Entity(tableName = Constants.KAFANI_TABLE_NAME)
data class Kafana(
@PrimaryKey
@ColumnInfo(name = "name")
@SerializedName("name")
val name: String,
@ColumnInfo(name = "phone")
@SerializedName("phone")
val phone: String,
@ColumnInfo(name = "address")
@SerializedName("address")
val address: String,
@ColumnInfo(name = "city")
@SerializedName("city")
val city: String,
@ColumnInfo(name = "sponsored")
@SerializedName("sponsored")
val isSponsored: Boolean,
@ColumnInfo(name = "isFavorite")
var isFavorite: Boolean

)

最佳答案

可以通过两种方式来完成

第一个:-在插入 Kafane 之前,您查询 getSingleKafana(name: String): Single 并从数据库中获取它(如果它可用)并获取最喜欢的状态并将这个最喜欢的字段设置为来自 API 的新 KAFANA 对象。

第二个: 做一个查询,它将返回最喜欢的 KAFANA 对象列表为真,结果将是列表,在从 API 插入新的 KAFANA 之前检查 kafana 是否显示在列表中。

Room 不支持任何条件插入查询。它将插入整个对象。

关于android - 房间数据库插入或更新但保留数据库字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48100553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com