sql >> データベース >  >> RDS >> Mysql

ルームデータベースandroidの値を合計するにはどうすればよいですか?

    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)
    }
    

    もちろん、メソッドupdateOrInsertSumを追加する必要があります リポジトリとビューモデルにも同様に、id ='1'を初めて呼び出すと、値が挿入されます:

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

    次の呼び出しで、アイテムは同じ方法で更新されます:

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


    1. Mysql構成ファイルのセクション

    2. Pythonを使用して可変列名でSQLにアクセスする

    3. SQL select returnの値を置き換える方法は?

    4. Mysqlの遅いクエリ:INNER JOIN +ORDERBYによりファイルソートが発生します