مقدمه

تبدیل یک داده خام به یک پایگاه داده ساخت یافته برای ذخیره سازی داخلی ، برای یک توسعه دهنده اندروید کار دشواری نیست. این کار با استفاده از معتبرترین زبان  SQL انجام می شود. SQLite کتابخانه اصلی در سیستم عامل Android است. این کتابخانه عملیات CRUD (ایجاد ، خواندن ، به روزرسانی و حذف) مورد نیاز برای یک پایگاه داده را مدیریت خواهد کرد. کلاس ها و رابط های جاوا برای SQLite توسط android.database ارائه شده است. SQLite سیستم مدیریت پایگاه داده موثر را حفظ می کند.

 اما این روش مرسوم معایب خاص خود را دارد:

۱) شما باید کد تکراری طولانی بنویسید ، که هم زمانبر و هم مستعد اشتباه است.

۲) مدیریت درخواستهای SQL برای یک پایگاه داده رابطه ای پیچیده بسیار دشوار است.

برای غلبه بر این مشکلات ، گوگل کتابخانه روم را معرفی کرده است. این کتابخانه به عنوان یک لایه انتزاعی ( ویکی پدیا ) برای API های SQLite موجود عمل می کند. تمام بسته ها ، پارامترها ، روش ها و متغیرهای مورد نیاز با استفاده از یادداشت ها و حاشیه نویسی های ساده به یک پروژه Android وارد می شوند.

 

کتابخانه Room چیست

کتابخانه Room در اندروید یک لایه انتزاعی بر روی SQLite فراهم می کند تا در هنگام استفاده از قدرت کامل SQLite ، به پایگاه داده قوی تر دسترسی داشته باشید.

این کتابخانه به شما کمک می کند حافظه پنهان داده های برنامه خود را در دستگاهی که برنامه شما در آن اجرا می شود ، ایجاد کنید.

این حافظه پنهان که به عنوان منبع واقعی برنامه شما عمل می کند ، به کاربران این امکان را می دهد که بدون توجه به اینکه به اینترنت وصل هستند یا خیر، یک نسخه ثابت از اطلاعات اصلی را در برنامه شما مشاهده کنند.

برنامه هایی که مقادیر کلی داده های ساخت یافته را کنترل می کنند ، ماندگاری داده ها در پایگاه داده محلی برایشان دارای اهمیت است. متداول ترین مورد استفاده از کتابخانه روم برای ذخیره سازی داده های مربوطه در دیتابیس محلی است. به این ترتیب ، هنگامی که دستگاه نمی تواند به شبکه دسترسی پیدا کند ، کاربر می تواند در هنگام آفلاین بودن محتوای آن را ببیند. پس از اینکه دستگاه دوباره آنلاین شد ، هرگونه تغییر محتوای ایجاد شده توسط کاربر ، با سرور همگام سازی می شود.

از آنجا که کتابخانه Room این امکان را برای شما فراهم می کند ، ما به شدت توصیه می کنیم از کتابخانه روم به جای SQLite استفاده کنید.

طریقه استفاده از کتابخانه Room در اندروید

برای استفاده از کتابخانه روم در برنامه خود ، کد های زیر را به فایل build.gradle برنامه خود اضافه کنید:

 

dependencies {
  def room_version = "2.2.5"

  implementation "androidx.room:room-runtime:$room_version"
  annotationProcessor "androidx.room:room-compiler:$room_version"

  // optional - RxJava support for Room
  implementation "androidx.room:room-rxjava2:$room_version"

  // optional - Guava support for Room, including Optional and ListenableFuture
  implementation "androidx.room:room-guava:$room_version"

  // optional - Test helpers
  testImplementation "androidx.room:room-testing:$room_version"
}

 

کامپوننت های کتابخانه Room

۳ کامپوننت اصلی در روم وجود دارد:

۱) پایگاه داده یا دیتابیس روم

شامل نگهدارنده پایگاه داده است و به عنوان نقطه دسترسی اصلی برای اتصال به داده های رابطه ای پایدار و برنامه شما عمل می کند.

کلاس حاوی دیتابیس روم باید شرایط زیر را داشته باشد:

۱- یک کلاس انتزاعی باشد که دیتابیس روم را گسترش دهد.

۲- لیست موجودیت های مرتبط با پایگاه داده را در یادداشت ها وارد کند.

۳- حاوی یک روش انتزاعی باشد که دارای ۰ آرگومان است و کلاسی را که باDao  حاوی یادداشت ها است برگرداند.

در زمان اجرا ، می توانید با فراخوانی Room.databaseBuilder () یا Room.inMemoryDatabaseBuilder ()  نمونه ای از دیتابیس را بدست آورید.

 

۲) Entity یا موجودیت

جدولی را در پایگاه داده روم نشان می دهد.

 

۳) DAO

شامل روش های مورد استفاده برای دسترسی به پایگاه داده است.

این برنامه از پایگاه داده Room برای بدست آوردن اشیا از دسترسی به داده ها یا DAO های مرتبط با آن پایگاه داده استفاده می کند. سپس برنامه از هر DAO برای بدست آوردن موجودیت و ذخیره هرگونه تغییر در آن موجودیت در پایگاه داده استفاده می کند. سرانجام ، برنامه از موجودیت برای بدست آوردن و تنظیم مقادیری متناسب با ستون های جدول موجود در پایگاه داده بهره می برد.

این رابطه بین اجزای مختلف روم در شکل زیر نشان داده شده است:

 

 

قطعه کد زیر شامل یک نمونه پیکربندی پایگاه داده با یک موجودیت و یک DAO است:

کلاس user

 

@Entity
public class User {
    @PrimaryKey
    public int uid;

    @ColumnInfo(name = "first_name")
    public String firstName;

    @ColumnInfo(name = "last_name")
    public String lastName;
}

 

کلاس userdao

 

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    @Query("SELECT * FROM user WHERE first_name LIKE :first AND " +
           "last_name LIKE :last LIMIT 1")
    User findByName(String first, String last);

    @Insert
    void insertAll(User... users);

    @Delete
    void delete(User user);
}

 

کلاس AppDatabase

 

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

 

پس از ایجاد فولدر های بالا ، با استفاده از کد زیر نمونه ای از پایگاه داده ایجاد شده را دریافت می کنید:

 

AppDatabase db = Room.databaseBuilder(getApplicationContext(),
        AppDatabase.class, "database-name").build();