Oda kalıcılık kitaplığı, SQLite API'lerini doğrudan kullanmaya kıyasla birçok avantaj sağlar:
- SQL sorgularını derleme süresinde doğrulama
- Tekrarlayan ve hataya açık standart kodları en aza indiren kullanışlı ek açıklamalar
- Basitleştirilmiş veritabanı taşıma yolları
Uygulamanızda şu anda SQLite'ın oda dışında bir uygulaması kullanılıyorsa uygulamanızı bunun yerine Room'a nasıl taşıyacağınızı öğrenmek için bu sayfayı okuyun. Room, uygulamanızda kullandığınız ilk SQLite uygulamasıysa temel kullanım bilgileri için Oda'yı kullanarak verileri yerel bir veritabanına kaydetme bölümüne bakın.
Taşıma adımları
SQLite uygulamanızı Room'a taşımak için aşağıdaki adımları uygulayın. SQLite uygulamanız büyük bir veritabanı veya karmaşık sorgular kullanıyorsa Room'a kademeli olarak geçiş yapmayı tercih edebilirsiniz. Artımlı taşıma stratejisi için Artımlı taşıma bölümüne bakın.
Bağımlılıkları güncelleme
Oda'yı uygulamanızda kullanmak için uygulamanızın build.gradle
dosyasına uygun bağımlılıkları eklemeniz gerekir. En güncel Oda bağımlılıkları için Kurulum bölümünü inceleyin.
Model sınıflarını veri varlıklarıyla güncelleme
Oda, veritabanındaki tabloları temsil etmek için veri varlıklarını kullanır. Her varlık sınıfı bir tabloyu temsil eder ve bu tablodaki sütunları temsil eden alanlar içerir. Mevcut model sınıflarınızı Oda varlıkları olacak şekilde güncellemek için aşağıdaki adımları uygulayın:
- Sınıf bildiriminin Oda varlığı olduğunu belirtmek için
@Entity
ile ek açıklama ekleyin. İsteğe bağlı olarak elde edilen tablonun sınıf adından farklı bir ada sahip olması gerektiğini belirtmek içintableName
özelliğini kullanabilirsiniz. - Birincil anahtar alanına
@PrimaryKey
ile ek açıklama ekleyin. - Açılan tablodaki sütunlardan herhangi birinin adının, karşılık gelen alanın adından farklı olması gerekiyorsa alana
@ColumnInfo
ek açıklama ekleyin vename
özelliğini doğru sütun adına ayarlayın. - Sınıfta, veritabanında kalmasını istemediğiniz alanlar varsa bu alanlara
@Ignore
ek açıklaması ekleyerek Room'un ilgili tabloda bunlar için sütun oluşturmaması gerektiğini belirtin. - Sınıfta birden fazla kurucu yöntemi varsa diğer tüm oluşturuculara
@Ignore
ile ek açıklama ekleyerek Room'un hangi kurucuyu kullanması gerektiğini belirtin.
Kotlin
@Entity(tableName = "users") data class User( @PrimaryKey @ColumnInfo(name = "userid") val mId: String, @ColumnInfo(name = "username") val mUserName: String?, @ColumnInfo(name = "last_update") val mDate: Date?, )
Java
@Entity(tableName = "users") public class User { @PrimaryKey @ColumnInfo(name = "userid") private String mId; @ColumnInfo(name = "username") private String mUserName; @ColumnInfo(name = "last_update") private Date mDate; @Ignore public User(String userName) { mId = UUID.randomUUID().toString(); mUserName = userName; mDate = new Date(System.currentTimeMillis()); } public User(String id, String userName, Date date) { this.mId = id; this.mUserName = userName; this.mDate = date; } }
DAO oluşturma
Oda, veritabanına erişen yöntemleri tanımlamak için veri erişimi nesnelerini (DAO'lar) kullanır. Mevcut sorgu yöntemlerinizi DAO'larla değiştirmek için Oda DAO'larını kullanarak verilere erişme bölümündeki kılavuzu uygulayın.
Veritabanı sınıfı oluşturma
Room uygulamaları, veritabanının bir örneğini yönetmek için veritabanı sınıfı kullanır. Veritabanı sınıfınız RoomDatabase
kapsamını genişletmeli ve tanımladığınız tüm varlıklara ve DAO'lara referans vermelidir.
Kotlin
@Database(entities = [User::class], version = 2) @TypeConverters(DateConverter::class) abstract class UsersDatabase : RoomDatabase() { abstract fun userDao(): UserDao }
Java
@Database(entities = {User.class}, version = 2) @TypeConverters(DateConverter.class) public abstract class UsersDatabase extends RoomDatabase { public abstract UserDao userDao(); }
Taşıma yolu tanımlama
Veritabanı sürüm numarası değiştiğinden, Room'un mevcut verileri veritabanında tutması için taşıma yolu belirtmek üzere bir Migration
nesnesi tanımlamanız gerekir.
Veritabanı şeması değişmediği sürece, bu boş bir uygulama olabilir.
Kotlin
val MIGRATION_1_2 = object : Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { // Empty implementation, because the schema isn't changing. } }
Java
static final Migration MIGRATION_1_2 = new Migration(1, 2) { @Override public void migrate(SupportSQLiteDatabase database) { // Empty implementation, because the schema isn't changing. } };
Oda'daki veritabanı taşıma yolları hakkında daha fazla bilgi edinmek için Veritabanınızı taşıma bölümüne bakın.
Veritabanı örneklendirmesini güncelleyin
Bir veritabanı sınıfı ve taşıma yolu tanımladıktan sonra, taşıma yolu uygulanmış şekilde veritabanınızın bir örneğini oluşturmak için Room.databaseBuilder
aracını kullanabilirsiniz:
Kotlin
val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ) .addMigrations(MIGRATION_1_2).build()
Java
db = Room.databaseBuilder( context.getApplicationContext(), UsersDatabase.class, "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 Taşıma işlemlerini test etme bölümündeki yönergeleri uygulayın.
- DAO yöntemlerinizi test etmek için Veritabanınızı test etme bölümündeki yönergeleri uygulayın.
Artımlı taşıma
Uygulamanız büyük ve karmaşık bir veritabanı kullanıyorsa uygulamanızı tek seferde Room'a taşımak uygun olmayabilir. Bunun yerine, isteğe bağlı olarak ilk adım olarak veri varlıklarını ve Oda veritabanını uygulayabilir, ardından sorgu yöntemlerinizi daha sonra DAO'lara taşıyabilirsiniz. Bunun için özel veritabanı yardımcı sınıfınızı RoomDatabase.getOpenHelper()
ürününden aldığınız SupportSQLiteOpenHelper
nesnesiyle değiştirebilirsiniz.
Ek kaynaklar
SQLite'tan Room'a geçiş hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynakları inceleyin: