Room kalıcılık kitaplığı, SQLite API'lerini doğrudan kullanmaya kıyasla çeşitli avantajlar sunar:
- SQL sorgularının derleme zamanında doğrulanması
- Tekrarlanan ve hataya açık ortak metin kodunu en aza indiren kolaylık notları
- Kolaylaştırılmış veritabanı taşıma yolları
Uygulamanızda Room olmayan bir SQLite uygulaması varsa Room'a nasıl geçeceğinizi öğrenmek için bu sayfayı inceleyin. Room, uygulamanızdaki ilk SQLite uygulamasıysa temel kullanım için Room kullanarak verileri yerel bir veritabanına kaydetme başlıklı makaleyi inceleyin.
Taşıma adımları
SQLite uygulamanızı Room'a taşımak için aşağıdaki adımları uygulayın. SQLite uygulamanızda büyük bir veritabanı veya karmaşık sorgular kullanılıyorsa Room'a kademeli olarak geçiş yapmayı tercih edebilirsiniz. Artımlı taşıma stratejisi hakkında daha fazla bilgi için Artımlı taşıma başlıklı makaleyi inceleyin.
Bağımlılıkları güncelleme
Uygulamanızda Room'u kullanmak için uygulamanızın build.gradle dosyasına uygun bağımlılıkları eklemeniz gerekir. Oda bağımlılıkları hakkında daha fazla bilgi için Kurulum başlıklı makaleyi inceleyin.
Model sınıflarını veri varlıklarına güncelleme
Room, veritabanındaki tabloları temsil etmek için veri öğelerini kullanır. Her varlık sınıfı bir tabloyu temsil eder ve bu tablodaki sütunları temsil eden özelliklere sahiptir. Mevcut model sınıflarınızı Room varlıkları olarak güncellemek için aşağıdaki adımları uygulayın:
- Sınıf bildirimini
@Entityile açıklama ekleyerek bunun bir oda öğesi olduğunu belirtin. İsteğe bağlı olaraktableNameözelliğini kullanarak sonuç tablosunun sınıf adından farklı bir ada sahip olması gerektiğini belirtebilirsiniz. - Birincil anahtar özelliğini
@PrimaryKeyile açıklama ekleyin. - Elde edilen tablodaki sütunlardan herhangi birinin, ilgili özelliğin adından farklı bir adı olması durumunda özelliği
@ColumnInfoile açıklama ekleyin venameözelliğini doğru sütun adına ayarlayın. - Sınıfta veritabanında kalıcı olmasını istemediğiniz özellikler varsa Room'un ilgili tabloda bu özellikler için sütun oluşturmaması gerektiğini belirtmek üzere bu özellikleri
@Ignoreile açıklama ekleyin. - Sınıfta birden fazla oluşturucu varsa diğer tüm oluşturucuları
@Ignoreile açıklama ekleyerek Room'un hangi oluşturucuyu kullanması gerektiğini belirtin.
@Entity(tableName = "users") data class User( @PrimaryKey @ColumnInfo(name = "userid") val id: String, @ColumnInfo(name = "username") val userName: String?, @ColumnInfo(name = "last_update") val date: Date?, )
DAO oluşturma
Room, veritabanına erişen işlevleri tanımlamak için veri erişim nesnelerini (DAO'lar) kullanır. Mevcut sorgu işlevlerinizi DAO'larla değiştirmek için Room DAO'larını kullanarak verilere erişme bölümündeki yönergeleri uygulayın.
Veritabanı sınıfı oluşturma
Room uygulamaları, veritabanı örneğini yönetmek için bir veritabanı sınıfı kullanır. Veritabanı sınıfınız RoomDatabase'ı genişletmeli ve tanımladığınız tüm varlıklara ve DAO'lara referans vermelidir.
@Database(entities = [User::class], version = 2) @ColumnTypeConverters(DateConverter::class) abstract class UsersDatabase : RoomDatabase() { abstract fun userDao(): UserDao }
Taşıma yolu tanımlama
Veritabanı sürüm numarası değiştiğinden mevcut veritabanı verilerini korumak için bir Migration nesnesi tanımlamanız gerekir. Veritabanı şeması değişmezse bu taşıma boş olabilir.
val MIGRATION_1_2 = object : Migration(1, 2) { override suspend fun migrate(connection: SQLiteConnection) { // Empty implementation, because the schema isn't changing. } }
Room'daki veritabanı taşıma yolları hakkında daha fazla bilgi için Veritabanınızı taşıma başlıklı makaleyi inceleyin.
Veritabanı örneğini güncelleme
Bir veritabanı sınıfı ve taşıma yolu tanımladıktan sonra, taşıma yolu uygulanmış veritabanınızın bir örneğini oluşturmak için Room.databaseBuilder aracını kullanabilirsiniz:
val db = Room.databaseBuilder<UsersDatabase>(applicationContext, "database-name") .addMigrations(MIGRATION_1_2) .build()
Uygulamanızı test etme
Yeni oda uygulamanızı test ettiğinizden emin olun:
- Veritabanı taşıma işleminizi test etmek için Test taşıma işlemleri bölümündeki yönergeleri uygulayın.
- DAO işlevlerinizi test etmek için Veritabanınızı test etme bölümündeki yönergeleri uygulayın.
Aşamalı taşıma
Uygulamanız büyük ve karmaşık bir veritabanı kullanıyorsa uygulamanızı Room'a tek seferde taşımak mümkün olmayabilir. Bunun yerine, ilk adım olarak isteğe bağlı şekilde veri öğelerini ve Room veritabanını uygulayabilir, ardından sorgu işlevlerinizi daha sonra DAO'lara taşıyabilirsiniz.
Artımlı taşıma uygulamak için androidx.room3:room3-sqlite-wrapper yapısından roomDatabase.getSupportWrapper uzantı işlevini kullanarak SupportSQLiteDatabase uyumluluk sarmalayıcısı edinin. Bu sarmalayıcı, Android SQLite API'lerini kullanarak Room tarafından yönetilen veritabanında doğrudan Android tarzı SQL sorguları yürütmenize olanak tanır:
// Get SupportSQLiteDatabase wrapper val legacyDb = roomDatabase.getSupportWrapper() legacyDb.execSQL("INSERT INTO users ...")