استفاده از دیتابیس Room در اندروید

استفاده از دیتابیس Room در اندروید

شاید شده باشه تا حالا با خودتون فکر کرده باشین چجوری میشه داخل اپ اندرویدی خودتون اطلاعات رو آفلاین ذخیره و استفاده کنین!؟ یا نیاز داشتین یک ساختار منسجم و مشخص برای ذخیره سازی اطلاعات کاربرتون داخل اپ داشته باشید. در این پست قصد داریم اموزش ساخت یک دیتابیس با یک Entity به نام User رو ببینیم:

در ابتدا این کتابخانه هارو به dependencies خودتون در فایل .gradle اضافه کنید.

    // Room components
    implementation "android.arch.persistence.room:runtime:$roomComponentsVersion"
    annotationProcessor "android.arch.persistence.room:compiler:$roomComponentsVersion"

    // Lifecycle components
    implementation "android.arch.lifecycle:extensions:$lifecycleComponentsVersion"
    annotationProcessor "android.arch.lifecycle:compiler:$lifecycleComponentsVersion"

سپس برای ساخت Entity خود یک class به نام User ایجاد کنید.

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

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

    @ColumnInfo(name = "last_name")
    public String lastName;
}
  • توجه کنید که هر Entity باید حتما شامل یک PrimaryKey باشد.

سپس یک فایل interface با نام 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);
}

در این فایل می‌توانید query های مورد نیاز خود را اضافه کنید.

و در مرحله اخر:

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

    private static AppDatabase INSTANCE;

    public abstract UserDao userDao();

    /**
     * create db if it dose not exist and then return db
     *
     * @param context
     * @return an object of db
     */
    public static AppDatabase getAppDatabase(Context context) {
        if (INSTANCE == null) {
            INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "vitamin_database")
                    // allow queries on the main thread.
                    // Don't do this on a real app! See PersistenceBasicSample for an example.
                    .allowMainThreadQueries()
                    .build();
        }
        return INSTANCE;
    }

    public static void destroyInstance() {
        INSTANCE = null;
    }
}

در نهایت به راحتی می‌توانید اطلاعات خودتون رو به table اضافه، دریافت و یا پاک کنید. کافیست به هنگام نیاز تابع getAppDatabase رو صدا زده و از آن استفاده کنید.

0

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *