Odayı kullanarak verileri yerel veritabanına kaydetme Android Jetpack'in bir parçasıdır.

Önemsiz miktarda yapılandırılmış veri işleyen uygulamalar, bu verileri yerel olarak saklamanızı sağlar. En yaygın kullanım alanı, resimdeki alakalı Cihaz ağa erişemediğinde kullanıcının çevrimdışıyken de bu içeriğe göz atmaya devam edebilir.

Oda kalıcılık kitaplığı, izin vermek için SQLite üzerinde bir soyutlama katmanı sağlar ve SQLite'ın tüm gücünden yararlanır. Özellikle, Oda, aşağıdaki avantajları sunar:

  • SQL sorgularının derleme zamanında doğrulanması.
  • Tekrar eden ve hataya açık ortak metinleri en aza indiren kullanışlı ek açıklamaları girin.
  • Sadeleştirilmiş veritabanı taşıma yolları.

Bu göz önünde bulundurulduğunda, bunun yerine Oda etiketini kullanmanızı önemle tavsiye ederiz doğrudan SQLite API'lerini kullanmayı deneyin.

Kurulum

Uygulamanızda Oda özelliğini kullanmak için aşağıdaki bağımlılıkları uygulamanızın build.gradle dosyası:

Eski

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // To use Kotlin annotation processing tool (kapt)
    kapt "androidx.room:room-compiler:$room_version"
    // To use Kotlin Symbol Processing (KSP)
    ksp "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

Kotlin

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // To use Kotlin annotation processing tool (kapt)
    kapt("androidx.room:room-compiler:$room_version")
    // To use Kotlin Symbol Processing (KSP)
    ksp("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Temel bileşenler

Odanın üç ana bileşeni vardır:

  • Şu etiketi içeren veritabanı sınıfı: ve temel erişim noktası görevi görür. Böylece, uygulamanızın kalıcı verileri.
  • Verileri temsil eden veri varlıkları tablolarda bulunmayı unutmayın.
  • Veri erişim nesneleri (DAO'lar) Uygulamanızın sorgulamak, güncellemek, eklemek ve silmek için kullanabileceği yöntemler sağlar eklemesi gerekir.

Veritabanı sınıfı, uygulamanıza bu veritabanını kullanabilirsiniz. Buna karşılık uygulama, DAO'ları kullanarak veritabanını ilişkilendirilmiş veri varlığı nesnelerinin örnekleri olarak kabul eder. Uygulama ayrıca İlgili tablolardaki satırları güncellemek için tanımlanmış veri varlıklarını kullanabilir veya eklemek için yeni satırlar oluşturun. Şekil 1, Google ile İş Listesi’ndeki bileşenlerine ayıralım.

Şekil 1. Oda kitaplığı mimarisini gösteren şema.

Örnek uygulama

Bu bölümde, ayrı bir e-posta adresi içeren tek bir veri varlığı ve tek bir DAO.

Veri varlığı

Aşağıdaki kod, bir User veri varlığını tanımlar. Her bir User örneği , uygulamanın veritabanındaki user tablosundaki bir satırı temsil eder.

Kotlin

@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

Java

@Entity
public class User {
    @PrimaryKey
    public int uid;

    @ColumnInfo(name = "first_name")
    public String firstName;

    @ColumnInfo(name = "last_name")
    public String lastName;
}

Odadaki veri varlıkları hakkında daha fazla bilgi edinmek için Odayı kullanarak veri tanımlama varlık.

Veri erişim nesnesi (DAO)

Aşağıdaki kod, UserDao adlı bir DAO'yu tanımlar. UserDao, uygulamanın geri kalanının user tablosundaki verilerle etkileşim kurmak için kullandığı yöntemler.

Kotlin

@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
           "last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User

    @Insert
    fun insertAll(vararg users: User)

    @Delete
    fun delete(user: User)
}

Java

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
           "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);
}

DAO'lar hakkında daha fazla bilgi edinmek için Odayı kullanarak verilere erişme DAO'lar.

Veritabanı

Aşağıdaki kod, veritabanını barındıracak bir AppDatabase sınıfını tanımlar. AppDatabase, veritabanı yapılandırmasını tanımlar ve uygulamanın ana kalıcı verilere buradan erişebilirsiniz. Veritabanı sınıfı şu koşulları kabul etmelisiniz:

  • Sınıfa @Database ek açıklaması entities içerir dizisidir.
  • Sınıf, RoomDatabase.
  • Veritabanıyla ilişkili her DAO sınıfı için veritabanı sınıfı sıfır bağımsız değişken içeren ve bir örnek döndüren soyut bir yöntem tanımlamalıdır seçmeniz gerekir.

Kotlin

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Java

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

Not: Uygulamanız tek bir işlemde çalışıyorsa aşağıdaki talimatları izlemelisiniz: AppDatabase örneklendirme sırasında tekil tasarım kalıbı nesnesini tanımlayın. Her RoomDatabase örneği oldukça pahalıdır ve nadiren tek bir işlemde birden fazla örneğe erişim gerektirir.

Uygulamanız birden fazla işlemde çalışıyorsa Veritabanı oluşturucunuzda enableMultiInstanceInvalidation() çağrılacaktır. Bu şekilde, AppDatabase örneğiniz olduğunda paylaşılan veritabanı dosyasını tek işlemde geçersiz kılabilirsiniz. ve bu geçersiz kılma işlemi otomatik olarak Diğer işlemler içinde AppDatabase.

Kullanım

Veri varlığını, DAO'yu ve veritabanı nesnesini tanımladıktan sonra, , veritabanının bir örneğini oluşturmak için aşağıdaki kodu kullanabilir:

Kotlin

val db = Room.databaseBuilder(
            applicationContext,
            AppDatabase::class.java, "database-name"
        ).build()

Java

AppDatabase db = Room.databaseBuilder(getApplicationContext(),
        AppDatabase.class, "database-name").build();

Daha sonra örnek almak için AppDatabase aracındaki soyut yöntemleri kullanabilirsiniz. var. Buna karşılık, etkileşimde bulunmak için DAO örneğindeki ile değiştirin:

Kotlin

val userDao = db.userDao()
val users: List<User> = userDao.getAll()

Java

UserDao userDao = db.userDao();
List<User> users = userDao.getAll();

Ek kaynaklar

Oda hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara göz atın:

Örnekler

Codelab'ler

Bloglar