Sorguların kullanıcı arayüzünü engellemesini önlemek için, Oda, takip edebilirsiniz. Bu kısıtlama, DAO'nuzu (DAO) oluşturmanız gerektiği anlamına gelir. sorguları eşzamansız. Oda çeşitli çerçeveler içeren entegrasyonlar içerir. eşzamansız sorgu yürütme.
DAO sorguları üç kategoriye ayrılır:
- Veritabanına veri ekleyen, güncelleyen veya silen tek seferlik yazma sorguları.
- Veritabanınızdaki verileri yalnızca bir kez okuyan ve dönüş yapan tek seferlik okuma sorguları veritabanının anlık görüntüsüyle birlikte çalışır.
- Her seferinde veritabanınızdan veri okuyan Gözlemlenebilir okuma sorguları temel veritabanı tablolarının değişmesi ve bu tabloları yansıtacak yeni değerler yayan anlamına gelir.
Dil ve çerçeve seçenekleri
Oda, belirli bir dille birlikte çalışabilmek için entegrasyon desteği sağlar özellikleri ve kitaplıkları kullanın. Aşağıdaki tabloda, kampanyalarınıza göre geçerli iade türleri sorgu türü ve çerçevesine göre değişir:
Sorgu türü | Kotlin dili özellikleri | RxJava | Guava | Jetpack Yaşam Döngüsü |
---|---|---|---|---|
Tek seferlik yazma | Eş yordamlar (suspend ) |
Single<T> , Maybe<T> ,
Completable |
ListenableFuture<T> |
Yok |
Tek seferlik okuma | Eş yordamlar (suspend ) |
Single<T> , Maybe<T> |
ListenableFuture<T> |
Yok |
Gözlemlenebilir okuma | Flow<T> |
Flowable<T> , Publisher<T> ,
Observable<T> |
Yok | LiveData<T> |
Bu kılavuzda, DAO'larınızda asenkron sorgular uygulamak için bu entegrasyonları kullanabileceğiniz üç olası yöntem gösterilmektedir.
Akış ve dışkı içeren Kotlin
Kotlin, üçüncü taraf çerçeveleri olmadan asenkron sorgular yazmanıza olanak tanıyan dil özellikleri sunar:
- Oda 2.2 ve sonraki sürümlerde Kotlin'in Akış işlevini kullanın.
- Oda 2.1 ve daha yüksek sürümlerde,
suspend
anahtar kelimesini kullanarak DAO'nuzu oluşturabilirsiniz. Kotlin eş yordamları kullanarak eşzamansız sorgular
RxJava ile Java
Uygulamanızda Java programlama dili kullanılıyorsa özel dönüşü kullanabilirsiniz farklı türler oluşturabilirsiniz. Odanın sunduğu olanaklar aşağıdaki RxJava 2 dönüş türleri için destek:
- Tek seferlik sorgular için Room 2.1 ve sonraki sürümler
Completable
,Single<T>
veMaybe<T>
döndürme türlerini destekler. - Gözlemlenebilir sorgular için Oda,
Publisher<T>
Flowable<T>
, veObservable<T>
ve dönüş türleri.
Ayrıca, Oda 2.3 ve sonraki sürümler RxJava 3'ü destekler.
LiveData ve Guava ile Java
Uygulamanız Java programlama dilini kullanıyorsa ve RxJava çerçevesini kullanıyorsanız, eşzamansız yazmak için aşağıdaki alternatifleri kullanabilirsiniz sorgu sayısı:
LiveData
sarmalayıcıyı kullanabilirsiniz sınıfını kullanabilirsiniz.- URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için
ListenableFuture<T>
sarmalayıcı kullanarak eşzamansız tek seferlik sorgular yazmanızı sağlayabilir.
Eşzamansız tek seferlik sorgular yazma
Tek seferlik sorgular, yalnızca bir kez çalıştırılan ve anlık görüntü alan veritabanı işlemleridir verilere dahil edilir. Eşzamansız ile ilgili bazı örnekleri burada bulabilirsiniz tek seferlik sorgular:
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); }
Gözlemlenebilir sorgular yazma
Gözlemlenebilir sorgular, mevcut olduğunda yeni değerler yayan okuma işlemleridir sorgu tarafından başvurulan tablolarda değişiklik yapılmasını sağlar. Bu işlevi, temel veritabanındaki öğeler eklendikçe, güncellendikçe veya kaldırıldığında görüntülenen öğe listesini güncel tutmak için kullanabilirsiniz. Aşağıda bazı örnekler verilmiştir: gözlemlenebilir sorgu örnekleri:
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); }
Ek kaynaklar
Eşzamansız DAO sorguları hakkında daha fazla bilgi edinmek için aşağıdaki ek bilgilere bakın kaynaklar: