sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo sumar el valor en la base de datos de la habitación de Android?

Intente agregar el siguiente método en su dao:

@Query("UPDATE sum SET value = value + :addValue WHERE id =:id")
suspend fun updateSum(id: Int, addValue: Long)

Luego puede llamarlo desde su ViewModel/Activity

ACTUALIZAR

Para un método único para actualizar/insertar, coloque estos métodos en 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)
}

Por supuesto, debe agregar el método updateOrInsertSum a su repositorio y modelo de vista también Entonces, si llama a id ='1' por primera vez, se insertará el valor:

viewmodel.updateOrInsertSum(Sum(1 ,10000)) // <-- id = 1, value = 10000

En la próxima convocatoria, el artículo se actualizará con el mismo método:

viewmodel.updateOrInsertSum(Sum(1 ,20000)) // <-- id = 1, value = 10000+2000