Android 如何在房间数据库中求和
我想知道如何在房间数据库中求和 假设我在房间数据库中插入了这个值(10000),我想在数据库中插入新值(20000),我希望新值与旧值求和,而不是替换它 我该怎么做 代码示例: 数据库表:Android 如何在房间数据库中求和,android,mysql,kotlin,android-room,Android,Mysql,Kotlin,Android Room,我想知道如何在房间数据库中求和 假设我在房间数据库中插入了这个值(10000),我想在数据库中插入新值(20000),我希望新值与旧值求和,而不是替换它 我该怎么做 代码示例: 数据库表: @entity class sum ( id : int , value : Long ) Dao : @insert (onConflict = OnConflictStrategy.REPLACE) suspend fun insert (model :sum) what shoud i us
@entity
class sum (
id : int ,
value : Long )
Dao :
@insert (onConflict = OnConflictStrategy.REPLACE)
suspend fun insert (model :sum)
what shoud i use instead of above insert .
@Query("SELECT * FROM sum")
fun getall () : LiveData<sum>
感谢各位关注我的代码并帮助我。在Dao中,我看到您使用了函数getAll(), 假设您将它们保存到整数列表中
val list: List<Int>//list holding all of you data returned in the onChanged method of the observer callback(or the lambda callback in case of Kotlin)
调用update函数时,将我前面提到的“list”中的旧值和newValue的总和传递给它
database.dao.update(list[1] + newValue)
尝试在dao中添加下一个方法:
@Query("UPDATE sum SET value = value + :addValue WHERE id =:id")
suspend fun updateSum(id: Int, addValue: Long)
然后可以从ViewModel/Activity调用它
更新
对于更新/插入的单个方法,请将这些方法放在dao中:
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertSum(model: Sum)
@Query("UPDATE sum SET value = value + :value WHERE id = :id")
suspend fun updateSum(id: Int, value: Long)
@Query("SELECT * FROM sum WHERE id = :id")
suspend fun getSumById(id: Int): Sum?
@Transaction
suspend fun updateOrInsertSum(sum: Sum) { // <-- this method updates value or insert new item, if id is not found
getSumById(sum.id)?.let { updateSum(sum.id, sum.value) } ?: insertSum(sum)
}
在下一次调用时,将使用相同的方法更新项目:
viewmodel.updateOrInsertSum(Sum(1 ,20000)) // <-- id = 1, value = 10000+2000
viewmodel.updateOrInsertSum(Sum(12000))//我正在使用上面的代码,但没有在数据库中插入任何内容。为什么?````@Entity(tableName=“credit”)数据类credit(@PrimaryKey val-id:Int?,var-credittext:Long)````@Query(“UPDATE-credit-SET-credittext=credittext+:addValue-WHERE-id=:id=:id”)挂起乐趣更新Sum(id:Int,addValue:Long)```suspend-fun-update(id:Int,addValue:Long)=db.GetDao().updateSum(id,addValue)
``fun-getallcredit()=db.GetDao().creditall()```
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertSum(model: Sum)
@Query("UPDATE sum SET value = value + :value WHERE id = :id")
suspend fun updateSum(id: Int, value: Long)
@Query("SELECT * FROM sum WHERE id = :id")
suspend fun getSumById(id: Int): Sum?
@Transaction
suspend fun updateOrInsertSum(sum: Sum) { // <-- this method updates value or insert new item, if id is not found
getSumById(sum.id)?.let { updateSum(sum.id, sum.value) } ?: insertSum(sum)
}
viewmodel.updateOrInsertSum(Sum(1 ,10000)) // <-- id = 1, value = 10000
viewmodel.updateOrInsertSum(Sum(1 ,20000)) // <-- id = 1, value = 10000+2000