क्वेरी को यूज़र इंटरफ़ेस (यूआई) ब्लॉक करने से रोकने के लिए, रूम ने डेटाबेस को ऐक्सेस करने की अनुमति नहीं दी है मुख्य थ्रेड. इस पाबंदी का मतलब है कि आपको डीएओ क्वेरी एसिंक्रोनस न हों. द रूम लाइब्रेरी में कई अलग-अलग फ़्रेमवर्क के साथ इंटिग्रेशन मौजूद होते हैं. एसिंक्रोनस क्वेरी निष्पादन.
डीएओ क्वेरी तीन कैटगरी में आती हैं:
- वन-शॉट राइट वाली ऐसी क्वेरी जो डेटाबेस में डेटा जोड़ती हैं, अपडेट करती हैं या मिटाती हैं.
- वन-शॉट रीड ऐसी क्वेरी जो आपके डेटाबेस से डेटा को सिर्फ़ एक बार पढ़ती हैं और नतीजे दिखाती हैं उस समय डेटाबेस के स्नैपशॉट के साथ एक नतीजा मिलेगा.
- देखी जा सकने वाली क्वेरी, जो हर बार आपके डेटाबेस से डेटा को पढ़ती हैं: मौजूदा डेटाबेस टेबल उन्हें दिखाने के लिए नई वैल्यू बनाती हैं और उनमें बदलाव करती हैं बदलाव.
भाषा और फ़्रेमवर्क के विकल्प
Room, भाषा से जुड़ी खास सुविधाओं और लाइब्रेरी के साथ काम करने के लिए, इंटिग्रेशन की सुविधा देता है. इस टेबल में, सामान लौटाने के अलग-अलग तरीकों के बारे में बताया गया है ये क्वेरी टाइप और फ़्रेमवर्क के हिसाब से होते हैं:
क्वेरी का प्रकार | Kotlin लैंग्वेज की सुविधाएं | RxJava | ग्वावा | जेटपैक लाइफ़साइकल |
---|---|---|---|---|
एक बार में लिखने की सुविधा | कोरूटीन (suspend ) |
Single<T> , Maybe<T> ,
Completable |
ListenableFuture<T> |
लागू नहीं |
एक बार में रीड ओनली | कोरूटीन (suspend ) |
Single<T> , Maybe<T> |
ListenableFuture<T> |
लागू नहीं |
आसानी से पढ़ा जा सकने वाला टेक्स्ट | Flow<T> |
Flowable<T> , Publisher<T> ,
Observable<T> |
लागू नहीं | LiveData<T> |
इस गाइड में, तीन संभावित तरीके बताए गए हैं जिनका इस्तेमाल करके अपने डीएओ में असाइनोक्रोनस क्वेरी लागू की जा सकती हैं.
फ़्लो और कोर्स के साथ Kotlin
Kotlin में भाषा से जुड़ी सुविधाएं मिलती हैं, जिनसे आपको एसिंक्रोनस क्वेरी लिखने में मदद मिलती है ये सुविधाएं तीसरे पक्ष के फ़्रेमवर्क के बिना इस्तेमाल की जा सकती हैं:
- रूम 2.2 और उसके बाद के वर्शन में, Kotlin के फ़्लो की सुविधा मिलती है.
- Room 2.1 और इसके बाद के वर्शन में,
suspend
कीवर्ड का इस्तेमाल करके, Kotlin कोरुटिन का इस्तेमाल करके, अपनी DAO क्वेरी को असिंक्रोनस बनाया जा सकता है.
RxJava के साथ Java
अगर आपका ऐप्लिकेशन Java प्रोग्रामिंग भाषा का इस्तेमाल करता है, तो आप खास रिटर्न का इस्तेमाल कर सकते हैं टाइप जो RxJava फ़्रेमवर्क से मिलते-जुलते हैं. Room, RxJava 2 के इन रिटर्न टाइप के साथ काम करता है:
- एक-बार में की जाने वाली क्वेरी के लिए, रूम 2.1 और उससे ऊपर के वर्शन,
Completable
Single<T>
औरMaybe<T>
रिटर्न टाइप. - रूम, मॉनिटर की जा सकने वाली क्वेरी के लिए,
Publisher<T>
Flowable<T>
औरObservable<T>
रिटर्न टाइप.
इसके अलावा, रूम 2.3 और उससे आगे के वर्शन RxJava 3 पर भी काम करते हैं.
LiveData और Guava के साथ Java
अगर आपका ऐप्लिकेशन Java प्रोग्रामिंग भाषा का इस्तेमाल करता है और आपको RxJava फ़्रेमवर्क के तौर पर, तो एसिंक्रोनस लिखने के लिए नीचे दिए गए विकल्प इस्तेमाल किए जा सकते हैं क्वेरी:
LiveData
रैपर का इस्तेमाल किया जा सकता है क्लास का इस्तेमाल करें.- Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए
ListenableFuture<T>
रैपर का इस्तेमाल करें.
एसिंक्रोनस वन-शॉट क्वेरी लिखें
वन-शॉट क्वेरी, ऐसी डेटाबेस ऑपरेशन होती हैं जो सिर्फ़ एक बार चलती हैं और स्नैपशॉट लेती हैं डेटा को कॉपी करते हैं. एक बार में पूरी होने वाली असाइनीश्न क्वेरी के कुछ उदाहरण यहां दिए गए हैं:
Kotlin
@Dao interface UserDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertUsers(vararg users: User) @Update suspend fun updateUsers(vararg users: User) @Delete suspend fun deleteUsers(vararg users: User) @Query("SELECT * FROM user WHERE id = :id") suspend fun loadUserById(id: Int): User @Query("SELECT * from user WHERE region IN (:regions)") suspend fun loadUsersByRegion(regions: List<String>): List<User> }
Java
@Dao public interface UserDao { @Insert(onConflict = OnConflictStrategy.REPLACE) public Completable insertUsers(List<User> users); @Update public Completable updateUsers(List<User> users); @Delete public Completable deleteUsers(List<User> users); @Query("SELECT * FROM user WHERE id = :id") public Single<User> loadUserById(int id); @Query("SELECT * from user WHERE region IN (:regions)") public Single<List<User>> loadUsersByRegion(List<String> regions); }
Java
@Dao public interface UserDao { // Returns the number of users inserted. @Insert(onConflict = OnConflictStrategy.REPLACE) public ListenableFuture<Integer> insertUsers(List<User> users); // Returns the number of users updated. @Update public ListenableFuture<Integer> updateUsers(List<User> users); // Returns the number of users deleted. @Delete public ListenableFuture<Integer> deleteUsers(List<User> users); @Query("SELECT * FROM user WHERE id = :id") public ListenableFuture<User> loadUserById(int id); @Query("SELECT * from user WHERE region IN (:regions)") public ListenableFuture<List<User>> loadUsersByRegion(List<String> regions); }
मॉनिटर की जा सकने वाली क्वेरी लिखें
ऑब्ज़र्व की जा सकने वाली क्वेरी रीड ऑपरेशन होती हैं, जो क्वेरी से रेफ़र की गई किसी भी टेबल में बदलाव करता है. इसका मतलब यह है कि इसका इस्तेमाल, आइटम की दिखाई गई सूची को आइटम के तौर पर अप-टू-डेट रखने के लिए किया जाता है को डाला जाता है, अपडेट किया जाता है या हटाया जाता है. यहां कुछ उदाहरण दिए गए हैं, जिनमें निगरानी की जा सकने वाली क्वेरी का इस्तेमाल किया गया है:
Kotlin
@Dao interface UserDao { @Query("SELECT * FROM user WHERE id = :id") fun loadUserById(id: Int): Flow<User> @Query("SELECT * from user WHERE region IN (:regions)") fun loadUsersByRegion(regions: List<String>): Flow<List<User>> }
Java
@Dao public interface UserDao { @Query("SELECT * FROM user WHERE id = :id") public Flowable<User> loadUserById(int id); @Query("SELECT * from user WHERE region IN (:regions)") public Flowable<List<User>> loadUsersByRegion(List<String> regions); }
Java
@Dao public interface UserDao { @Query("SELECT * FROM user WHERE id = :id") public LiveData<User> loadUserById(int id); @Query("SELECT * from user WHERE region IN (:regions)") public LiveData<List<User>> loadUsersByRegion(List<String> regions); }
अन्य संसाधन
एसिंक्रोनस डीएओ क्वेरी के बारे में ज़्यादा जानने के लिए, यहां दिए गए अन्य संसाधन देखें: