کارهایی که تا این مرحله اعمال دادیم مرتبط با تمجیدطراحی اپلیکیشن در مشهد دیتابیس و جداول آن بود. حال فرصت به کار گیری از این جداول برای وارد کردن اطلاعات یا این که قرائت اطلاعات و یا این که تغییر تحول اطلاعات میباشد. پیش از استعمال از Room می بایست شیئی از نوع دیتابیسی که در مرحله گذشته تمجید کردیم بدست آوریم. کد مرتبط با دسترسی بدین شی را در اسلوب onCreate از کلاس Application می نویسیم. رایاپارس در صورتیکه تا قبل از اینً این کلاس را به پروژه اضافه نکرده اید application کلاسی با اسم از روی اختیار به عنوان مثالً MyDatabaseApplication بسازید که از Application ارث بری نماید به طور پایین:
// Mohamadreza Amani
// Email: help4usr@gmail.com
public class MyDatabaseApplication extends Application {
MyDatabase myDatabase;
@Override
public void onCreate() {
super.onCreate();
// fallbackToDestructiveMigration() متد
// استفاده شده تا اگر نسخه را تغییر دادید تمام داده های دیتابیس پاک شود
// در برنامه کاربردی بجای پاک کردن داده ها باید داده ها را متناسب با تغییرات به روز کنید
myDatabase = Room.databaseBuilder(this, MyDatabase.class, MyDatabase.NAME).fallbackToDestructiveMigration().build();
}
public MyDatabase getMyDatabase() {
return myDatabase;
}
}
برای به کار گیری از کلاس Application می بایست اسم آن را در Manifest معلوم نمایید. اسم این کلاس را در کد بالا MyDatabaseApplication گزینش کرده بودیم، هم اکنون اسم آن را در پوشه AndroidManifest.xml در خصوصیت android:name وارد میکنیم:
android:name=\".MyDatabaseApplication\"
...>
عملیات های نخستین CRUD
CRUD مخفف کلمه و واژه های Create در معنای «ساختن»، Read در معنای «قرائت»، Update در معنای «آپ دیت رسانی» و Delete در معنای «حذف کردن» میباشد و اشاره به دستوراتی در SQL داراهستند که برای تغییرو تحول اطلاعات استعمال می گردند.
در کد تحت عملیات Create (ساختن) را میبینید. یک شی از کالا User و یک شی از فرآورده Organization میسازیم و آنهارا از روش یک تراکنش (Transaction) در دیتابیس ذخیره میکنیم:
// Mohamadreza Amani
// Email: help4usr@gmail.com
final Organization organization = new Organization();
organization.setName(\"Android\");
final User user = new User();
user.setName(\"Mohamadreza Amani\");
// Get the DAO
final UserDao userDao = ((MyDatabaseApplication) getApplicationContext()).getMyDatabase().userDao();
// Define the task
((MyDatabaseApplication) getApplicationContext()).getMyDatabase().runInTransaction(new Runnable() {
@Override
public void run() {
userDao.insertOrganization(organization);
userDao.insertUser(user);
}
});
کوئری دیتابیس
کلیه کوئری ها می بایست در کلاس های مرتبط با دسترسی به اطلاعات (DAO) نوشته شوند.
درصورتیکه بخواهیم به شکلی درباره استفاده کننده (User) جست و جو کنیم که اسم سازمان (Organization) اورا نیز بدست آوریم. میتوانیم به طور تحت کوئری را بنویسیم:
// declare inner join here
@Query(\"SELECT User.*, Organization.name AS organization_name FROM User INNER JOIN Organization \" +
\"ON User.organization_id = Organization.id WHERE User.id = :id\")
public UserWithOrganization getWithOrgById(int id);
در کوئری بالا بجای استعمال از (organization.name) از organization_name به کارگیری کردیم و برای اینکار از کلام AS به کار گیری کردیم. با اینکار می اقتدار نقص همنام بودن ردیف ها در جدول های متفاوت را حل کرد از جملهً هر دو جدول Organization و User ستونی به اسم name دارا هستند. برای استعمال از مقدار بازگشتی این روال که دربرگیرنده User و organization_name میباشد بایستی کلاس جدیدی بسازیم. اسم این کلاس را در کد بالا UserWithOrganization گذاشتیم که کد آن به طور تحت میباشد.