SQLite'den Odaya taşıma

Oda kalıcılığı kitaplığı, SQLite kullanımına kıyasla çeşitli avantajlar sunar. Doğrudan API'ler:

  • 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ı kod
  • Sadeleştirilmiş veritabanı taşıma yolları

Uygulamanızda şu anda SQLite'ın oda dışı bir uygulaması kullanılıyorsa bu sayfayı okuyun başlıklı makaleyi inceleyin. Oda ilk odaysa Uygulamanızda kullandığınız SQLite uygulaması için Verileri yerel bir belleğe kaydetme veritabanını kullanarak oturum açın.

Taşıma adımları

SQLite uygulamanızı Odaya taşımak için aşağıdaki adımları uygulayın. Eğer SQLite uygulamanız büyük bir veritabanı veya karmaşık sorgular kullanıyorsa Odaya kademeli olarak geçmeyi tercih ediyorsanız. Artımlı taşıma başlıklı makaleyi inceleyin. artımlı geçiş stratejisi seçin.

Bağımlılıkları güncelleme

Uygulamanızda Oda kullanmak için uygun bağımlılıkları uygulamanın build.gradle dosyası. Aşağıdakiler için Kurulum bölümüne bakın: en güncel Oda bağımlılıklarını göreceksiniz.

Model sınıflarını veri varlıklarına güncelleme

Oda, şunları yapmak için veri varlıklarını kullanır: veritabanındaki tabloları temsil eder. Her varlık sınıfı bir tabloyu temsil eder ve bu tablodaki sütunları temsil eden alanlar içermelidir. Güncellemek için şu adımları uygulayın: Mevcut model sınıflarınızı Oda varlıkları olacak şekilde ayarlayın:

  1. Sınıf beyanına şununla not ekleyin: Bunun bir olduğunu belirtmek için @Entity Oda varlığı. İsterseniz tableName özelliğini sonuçta elde edilen tablonun tıklayın.
  2. Birincil anahtar alanına not ekleyin @PrimaryKey.
  3. Sonuçta ortaya çıkan tablodaki sütunlardan herhangi birinin adı alanın adından farklıysa, alana @ColumnInfo ve name mülkünü doğru sütun adını girin.
  4. Sınıfta, veritabanında saklanmasını istemediğiniz alanlar varsa bu alanlara @Ignore (Odanın oda olduğunu) belirtir ilgili tabloda onlar için sütun oluşturmamalıdır.
  5. Sınıfta birden fazla kurucu yöntemi varsa hangi kurucuyu belirtin Oda, diğer tüm kuruculara @Ignore ile not eklenerek kullanılmalıdır.

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'lar oluşturma

Oda, veritabanına erişen yöntemleri tanımlamak için veri erişimi nesnelerini (DAO'lar) kullanır. Odayı kullanarak verilere erişme DAO'lar: Mevcut sorgunuzu değiştirin farklı veri yönetimi yöntemleri mevcuttur.

Veritabanı sınıfı oluşturma

Room uygulamaları bir örneği yönetmek için veritabanı sınıfı kullanır: Veritabanı sınıfınızın RoomDatabase ve tümüne referans ver sayısını ve DAO'larınızı ekleyebilirsiniz.

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, Migration nesne Odanın veritabanındaki mevcut verileri saklaması için bir taşıma yolu belirtmeniz gerekir. Veritabanı şeması değişmediği sürece bu değer boş olabilir hakkında bilgi edindiniz.

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ı ile doğrulayın.

Veritabanı örneklendirmesini güncelleme

Bir veritabanı sınıfı ve taşıma yolu tanımladıktan sonra, şunları kullanabilirsiniz: Room.databaseBuilder veri tabanınızın taşıma yolunun uygulandığı bir örneğini oluşturun:

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 bu veritabanının taşınması mümkün olmayabilir uygulamanızı Odaya yükleyebilirsiniz. Bunun yerine verileri isteğe bağlı olarak varlıkları ve Oda veritabanını bulun ve ardından sorgu yöntemlerinizi taşıyın. DAO'lara aktaracağım. Bunu yapmak için özel veritabanı yardımcınızı sınıfını SupportSQLiteOpenHelper aldığınız nesne RoomDatabase.getOpenHelper().

Ek kaynaklar

SQLite'tan Room'a taşıma hakkında daha fazla bilgi için aşağıdaki ek kaynaklar:

Bloglar