मैं जानना चाहता हूं कि मैं कमरे के डेटाबेस में मूल्य कैसे जोड़ सकता हूं।

मान लें कि मैंने कमरे के डेटाबेस में यह मान (10,000) डाला है और मैं डेटाबेस (20,000) में नया मान डालना चाहता हूं और मैं चाहता हूं कि नया मान पुराने मान के साथ हो, इसे प्रतिस्थापित न करें।

मैं वह कैसे कर सकता हूं ।?

कोड का उदाहरण:

डेटाबेस तालिका:

@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>

और गतिविधि में:

late init var : viewmodel : Viewmodeldatabase 
val textvalue : TextView

viewmodel = Viewmodelprovider(this).get(Viewmodeldatabase::class.java)

textvalue = findvidwbyid(R.id.text)
viewmodel.insert(sum(1 , 10000)

// when the above value insert , if there is an old value sum with it and not replace it or remove it 

viewmodel.getall.observe(this , Observer {

textvalue.text = it.value


)}

मेरा कोड देखने और मेरी मदद करने के लिए धन्यवाद दोस्तों।

2
Bahador Eslami 15 सितंबर 2020, 00:50

2 जवाब

सबसे बढ़िया उत्तर

अपने दाओ में अगली विधि जोड़ने का प्रयास करें:

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

फिर आप इसे अपने व्यूमोडेल/गतिविधि से कॉल कर सकते हैं

अपडेट करें

अद्यतन/सम्मिलित करने के लिए एकल विधि के लिए इन विधियों को दाओ में रखें:

@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 
3
sergiy tikhonov 15 सितंबर 2020, 22:07

आपके दाओ में, मैं देखता हूं कि आप 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)

मान लें कि आप स्थिति 1 पर मान अपडेट करना चाहते हैं:

@Update
public void update(newVal: Int);

और अद्यतन फ़ंक्शन को कॉल करते समय इसे "सूची" से आने वाले पुराने मान का सारांश जो मैंने पहले उल्लेख किया था और नया वैल्यू

database.dao.update(list[1] + newValue)
0
Mohammad Elsayed 15 सितंबर 2020, 01:31