SQLite'den Odaya taşıma

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:

  1. 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çin tableName özelliğini kullanabilirsiniz.
  2. Birincil anahtar alanına @PrimaryKey ile ek açıklama ekleyin.
  3. 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 ve name özelliğini doğru sütun adına ayarlayın.
  4. 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.
  5. 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:

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:

Bloglar