نقل البيانات من SQLite إلى غرفة

توفر مكتبة بقاء الغرفة عددًا من الفوائد مقارنة باستخدام SQLite واجهات برمجة التطبيقات مباشرةً:

  • التحقق من وقت التجميع لطلبات بحث SQL
  • تعليقات توضيحية ملائمة تقلّل من النصوص النموذجية المتكرّرة والمعرَّضة للأخطاء رقم الاعتماد
  • مسارات نقل بيانات مبسّطة لقواعد البيانات

إذا كان تطبيقك يستخدم حاليًا تنفيذ SQLite خارج الغرفة، يُرجى الاطّلاع على هذه الصفحة. للتعرّف على كيفية نقل تطبيقك لاستخدام الغرفة بدلاً من ذلك. إذا كانت الغرفة هي أول تنفيذ SQLite الذي تستخدمه في تطبيقك، يُرجى الاطّلاع على حفظ البيانات في دليل محلي باستخدام الغرفة للحصول على معلومات الاستخدام الأساسية.

خطوات نقل البيانات

نفِّذ الخطوات التالية لنقل تنفيذ SQLite إلى الغرفة. في حال حذف تنفيذ SQLite يستخدم قاعدة بيانات كبيرة أو استعلامات معقدة، يمكنك يفضّلون النقل إلى الغرفة تدريجيًا. يُرجى الاطّلاع على النقل المتزايد للاستفادة من استراتيجية نقل بيانات إضافية

تعديل الاعتماديات

لاستخدام الغرفة في تطبيقك، يجب تضمين العناصر الاعتمادية المناسبة في الملف build.gradle للتطبيق. راجع الإعداد لـ وأحدث تبعيات الغرفة.

تعديل فئات النماذج في كيانات البيانات

تستخدم الغرفة كيانات البيانات من أجل لتمثيل الجداول في قاعدة البيانات. تمثل كل فئة كيان جدولاً يحتوي على حقول تمثل الأعمدة في هذا الجدول. يُرجى اتّباع هذه الخطوات لتعديل فئات النماذج الحالية لتكون وحدات الغرف:

  1. ضع تعليقًا توضيحيًا على إعلان الفئة باستخدام @Entity للإشارة إلى أنّه كيان الغرفة. يمكنك اختياريًا استخدام tableName الإشارة إلى أن الجدول الناتج يجب أن يكون له اسم مختلف عن اسم الفئة.
  2. قم بإضافة تعليق توضيحي لحقل المفتاح الأساسي @PrimaryKey
  3. إذا كان يجب أن يكون لأي من الأعمدة في الجدول الناتج اسم مختلف عن اسم الحقل المقابل، فقم بإضافة تعليقات توضيحية إلى الحقل @ColumnInfo وضبط name على باسم العمود الصحيح.
  4. إذا كانت الفئة تحتوي على حقول لا تريد الاحتفاظ بها في قاعدة البيانات، إضافة ملاحظات توضيحية إلى هذه الحقول @Ignore للإشارة إلى تلك الغرفة يجب ألا تنشئ أعمدة لها في الجدول المقابل.
  5. إذا كانت الفئة تحتوي على أكثر من طريقة إنشائية واحدة، فوضح أي دالة إنشائية يجب استخدام الغرفة من خلال إضافة تعليقات توضيحية إلى جميع التركيبات الإنشائية الأخرى باستخدام @Ignore.

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

تستخدم الغرفة عناصر الوصول إلى البيانات (DAO) لتحديد الطرق التي يمكنها الوصول إلى قاعدة البيانات. اتّبِع الإرشادات الواردة في مقالة الوصول إلى البيانات باستخدام الغرفة. رموز DAO لاستبدال طلب البحث الحالي باستخدام DAOs.

إنشاء فئة قاعدة بيانات

تستخدم عمليات تنفيذ الغرفة فئة قاعدة بيانات لإدارة نسخة افتراضية من قاعدة بيانات قاعدة البيانات. يجب تمديد فئة قاعدة البيانات RoomDatabase والإشارة إلى الكل للكيانات وأنظمة DAO التي حددتها.

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();
}

تحديد مسار نقل البيانات

نظرًا لأن رقم إصدار قاعدة البيانات يتغير، يجب عليك تحديد Migration من أجل تشير إلى مسار نقل بيانات بحيث تحتفظ الغرفة بالبيانات الموجودة في قاعدة البيانات. طالما أن مخطط قاعدة البيانات لا يتغير، يمكن أن يكون هذا الحقل فارغًا التنفيذ.

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.
  }
};

لمزيد من المعلومات حول مسارات نقل قاعدة البيانات في الغرفة، يُرجى الاطّلاع على المقالة نقل بيانات قاعدة بيانات.

تحديث مثيل قاعدة البيانات

بعد تحديد فئة قاعدة بيانات ومسار نقل البيانات، يمكنك استخدام Room.databaseBuilder لإنشاء مثيل من قاعدة البيانات مع تطبيق مسار نقل البيانات:

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();

التحقق من نجاح العملية

احرص على اختبار تنفيذ الغرفة الجديدة:

  • اتّبِع الإرشادات الواردة في المقالة اختبار. نقل البيانات لاختبارها وترحيل قاعدة البيانات.
  • اتّبِع الإرشادات الواردة في المقالة اختبار لاختبار DAO الطرق.

نقل البيانات المتزايد

إذا كان تطبيقك يستخدم قاعدة بيانات كبيرة ومعقدة، قد لا يكون من الممكن نقل البيانات. نقل تطبيقك إلى الغرفة في آنٍ واحد. بدلاً من ذلك، يمكنك تنفيذ البيانات والكيانات وقاعدة بيانات الغرف كخطوة أولى، ثم نقل طرق الاستعلام إلى DAO لاحقًا. ويمكنك إجراء ذلك من خلال استبدال مساعد قاعدة البيانات المخصّص. الفئة مع SupportSQLiteOpenHelper العنصر الذي تتلقاه من RoomDatabase.getOpenHelper()

مصادر إضافية

لمعرفة المزيد من المعلومات حول نقل البيانات من SQLite إلى Room، يمكنك الاطّلاع على العناصر الإضافية التالية الموارد:

المدوّنات