SAJAD noroozi
SAJAD noroozi
خواندن ۴ دقیقه·۶ سال پیش

بلعیدن شیرینی دانمارکی یا راهکاری برای قورت دادن استوانه ها

چرا و چگونگی استفاده از realm اونقدر واضحه که من میخوام باز هم دربارش بگم این دوست عزیز دانمارکی دقیقا مثل شیرینی دانمارکی خوشمزه دوست داشتنی و طبیعتا شیرینیه چیزی که اینجا میخونید راهکار ساده و سریع برای استفاده از پایگاه داده ریل ام هست ساده سریع و به همون شدت آسون برای رهایی از کوئری زدن های نامانوس در SQLITE به دامان ریل ام چنگ بزنید و متفرق نشوید! :)

قصه از کجا شروع شد...

قصه از اونجایی شروع شد که من همیشه از sql فراری بودم هیچوقتم دوستش نداشتم :| اکثر پروژه هایی که انجام دادم و کد هایی که تو این چند سال نوشته بودم عملا کلاینت های اندرویدی بودن که بود و نبودشون به سرور و دیتای ارسالی از بکند گره خورده بود ولی یه جایی تصمیم گرفتم قورباغه رو قورت بدم و بگردم ببینم چجوری میتونم کار با sqlite رو بدون دردخونریزی تجربه کنم خب کلی ORM خوب وجود داره که بدون نیاز به نوشتن query دنیا رو قشنگتر میکنن منم داشتم بینشون میچرخیدم که به دوست نازنینی برخوردم که جذابیتش منو تحت تاثیر قرار داد و اون دوست گرامی چیزی نبود جز Realm

ریل ام (realm)چیست؟

ریل ام یک ORM برای استفاده از SQLITE نیست

بلکه دقیقا یک جایگزین زیبا و جذاب برای sqlite هست که و به نوعی میشه بهش گفت اولین پایگاه داده شی گرا برای موبایل. ریل ام از هسته c++ استفاده میکنه و یک پایگاه داده مبتنی بر table در اختیار کاربر قرار میده خب برای اینکه بهتر بشه با sqlite مقایسه اش کرد باید یه جمع بندی کلی داشته باشیم

برتری های نسبت به SQLITE :

  • سرعت بالاتر (تا ده برابر سریعتر )
  • استفاده ساده تر
  • با اشیا (objects) بهتر کار میکنه
  • با داده های پویا و روی هوا (on the fly) بهتر کار میکنه
  • پشتیبانی قوی

نقاط ضعف نسبت به SQLITE :

  • قابلیت import ندارد
  • همچنان در حال توسعه
  • محتوای آموزشی کمتری درباره اش منتشر شده
  • نمیتوان در طول thread به اشیا دسترسی داشت

قابلیت های مهم :

  • پشتیبانی از null
  • پشتیبانی از نقشه
  • قابلیت migrate آسان
  • اعلان تغییر یک داده خاص
  • قابلیت استفاده از کلید های اصلی (primary key)مرکب

طبق آماری که خود توسعه دهنده های realm دادن حدودا 100 هزار توسعه دهنده در حال حاضر از realm استفاده میکنن که خب نشون میده میتونه جایگزین خوب و مناسبی برای SQLITE تو بحث موبایل ( بطور مشخص منظور من اندروید هست قابلیت استفاده در IOS هم داره) هست

چیزی که در ادامه نوشته شده صرفا یک توضیح ساده و آموزش CRUD در REALM هست نحوه استفاده از قابلیت های دیگه مثل notification و... رو میتونید تو سایت اصلی پیدا کنید

استفاده از REALM

اضافه کردن به پروژه:

کافیه این چند خط زیر رو در build.gradle پروژه اضافه کنید

buildscript { repositories { jcenter() } dependencies { classpath &quotio.realm:realm-gradle-plugin:5.8.0&quot } }

بالای build.gradle اپلیکیشن این یک خط رو اضافه کنید:

apply plugin: 'realm-android'

خب حالا کافیه ابزار دور زدن تحریم رو روشن کنید و صبر کنید gradle سینک شه

حالا توی اکتیوی extend شده از اپلیکیشن یا MainActivity تون realm رو باید initialize کنید اونم به سادگی

Realm.init(this);

تو مرحله بعد باید دیتا بیس رو بسازیم قطعا وقتی دیتا بیس میسازیم و فانکشن های crud مینویسیم باید برای ایجاد دیتا بیس از singleton استفاده کنید و خب بدیهیه ولی گفتم تذکر بدم تا مبادا هربار که شی جدید ساخته میشه یه دیتا بیس با همون نام ساخته شه چون اگر این کار کنید قطعا به در و دیوار برخورد میکنید :) پس یک بار initialize و یک بار ایجاد دیتا بیس و به تعداد مختلف crud .

ساخت پایگاه داده:

Realm DBname = Realm.getDefaultInstance();

ایجاد مدل داده :

قبل از هرکار دیگه باید object درست کنیم من اینجا فرض میکنم قراره یه تعداد کتاب ذخیره کنیم پس اینجوری میشه

public class Book extends RealmObject { @PrimaryKey private int id; private String title; private String description; private String author; // Standard getters & setters generated by your IDE…

و برای هرکدوم getter و setter تولید میکنیم البته ما که تولید نمیکنیم android studio این کارو میکنه

نوشتن داده در پایگاه:

تا اینجای کار تقریبا همه چیز محیاست تا بتونیم دیتا ذخیره کنیم اپدیت کنیم بخونیم و پاک کنیم قدم اول باید دیتا بنویسیم :

DBname.beginTransaction(); ‌Book book = DBname.createObject(Book.class); book.setId(&quot1325&quot); book.settitle(&quotrealmbook&quot); book.setauthor(&quotsajad&quot); book.setdescription(&quotits about Realm DB&quot); DBname.commitTransaction();

خواندن داده های ذخیره شده:

به همین سادگی ما یه شی کتاب به پایگاه داده مون اضافه کردیم بریم سراغ خوندن داده ها از پایگاه داده مون:

//Read all data RealmResults<‌Book> results = DBname.where(Book.class).findAll(); for(Book book : results){ System.out.println(book.gettitle() + &quot &quot + book.getauthor()); } //Read specific data RealmResults<Book> results = DBname.where(Book.class).equalTo(&quotid&quot, 1235).findAll();

به روز کردن داده ها:

آپدیت کردن و به روز کردن داده ها در realm:

RealmResults<‌Book> results = DBname.where(Book.class).equalTo(&quotid&quot, 20).findAll(); DBname.beginTransaction(); for(Book book : results){ Book.settitle(&quotnew Realm book&quot); } DBname.commitTransaction();

پاک کردن داده ها از پایگاه:

پاک کردن داده های در realm با کدهای زیر انجام میشه:

RealmResults<‌Book> results = Dbname.where(Book.class).findAll(); DBname.beginTransaction(); // remove single match results.deleteFirstFromRealm(); results.deleteLastFromRealm(); // remove a single object Book book = results.get(5); book.deleteFromRealm(); // Delete all matches results.deleteAllFromRealm(); DBname.commitTransaction();

فقط یک نکته باقی مونده اگر دقت کرده باشید اعمال تغییرات رو دیتا بیس مستلزم استفاده از دو عبارت .beginTransaction() و .commitTransaction() هست

در آخر هم باید بگم realm قابلیت های جذاب زیادی داره که میشه ازش استفاده کرد تا بهترین نتیجه رو بتونیم بگیریم علاوه بر اون سرویس کلود برای اپلیکیشن ارائه میده که البته ما جز دور افتاده از بقیه دنیا محسوب میشیم :)

امیدوارم مفید بوده باشه توضیحات و قطعا درصورت انتقاد و یادآوری مشکلاتی که احیانا از چشم من دور مونده بنده رو شاد میکنید

منابع:

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

وبسایت اصلی Realm

داکیومنت اصلی realm

آموزش در androidHive

آپدیت: یکی از بزرگترین مشکلات من در استفاده از realm بالابردن حجم برنامه به شکل قابل توجهی (حدود 5 مگابایت) بود که باعث شد طی یک عملیات سریع برم سمت RoomDB که هم سرعت خوبی داره هم ساده و سبک هست


اندرویدپایگاه دادهrealmandroidآموزش اندروید
کمی اندروید دولوپر کمی کنجکاو
شاید از این پست‌ها خوشتان بیاید