sql >> Database >  >> RDS >> Mysql

Hoe kan ik de waarde optellen in de kamerdatabase Android?

Probeer de volgende methode toe te voegen aan je dao:

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

Dan kun je het oproepen vanuit je ViewModel/Activity

UPDATE

Voor een enkele methode voor bijwerken/invoegen zet u deze methoden in 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)
}

Natuurlijk moet je methode updateOrInsertSum . toevoegen ook naar uw repository en viewmodel. Als u vervolgens voor de eerste keer id ='1' aanroept, wordt de waarde ingevoegd:

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

Bij de volgende oproep wordt het item op dezelfde manier bijgewerkt:

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


  1. MySQL-lus door tabellen

  2. PHP PDO SQL retourneert slechts één rij met gegevens in plaats van alle rijen

  3. Hoe u een buitenlandse sleutelfout kunt oplossen bij het uitvoeren van migratie

  4. Vervang het eerste voorkomen van subtekenreeks in een tekenreeks in SQL