Realm Database dan Contoh CRUD pada Android

Hallo semua, pada kesempatan kali ini akan membahas mengenai database Realm. Apa itu Realm ? seperti yang tertera pada website-nya, Realm adalah database pertama yang dibuat untuk bisa berjalan secara langsung di dalam ponsel, tablet dan wearable devices. Sebelumnya pilihan database untuk perangkat mobile hanya SQLite baik secara langsung atau menggunakan library untuk memudahkan seperti ORMLite.

SQLite sangat revolusioner ketika diluncurkan pada tahun 2000 tetapi pengembangan aplikasi mobile sekarang ini sangat berbeda daripada 16 tahun yang lalu, dan pemahaman mengenai apa itu “ponsel” dan “aplikasi” mengalami perubahan yang sangat drastis. Melihat seperti itu memberikan awal baru untuk pengolahan data pada perangkat mobile dengan API yang lebih mudah dan arsitektur yang menguntungkan dari satu dekade terakhir dalam inovasi database. Jadi singkatnya Realm ini salah satu mobile database pertama sebagai alternative / pengganti SQLite yang bisa di gunakan di dalam beberapa bahasa pemrograman seperti Java, Objective-C, React Native, Swift dan Xamarin. Kelebihan dari Realm adalah kecepatan dan kemudahan serta teknologi yang terdepan.

Kecepatan

Banyak pustaka/library yang menawarkan kesamaan fitur di atas SQLite, dengan mengorbankan kecepatan. Realm jauh lebih cepat daripada ORM, dan seringkali lebih cepat daripada SQLite pada operasi yang umum, sekaligus mempertahankan serangkaian fitur yang banyak. Berikut gambaran perbandingannya.

Benchmarks Insert
Benchmarks Insert
Benchmarks Counts
Benchmarks Counts
Benchmarks Queries
Benchmarks Queries

Kemudahan

Realm menawarkan kemudahan dengan waktu persiapan dalam menit, bukan jam. Bahkan untuk mem-porting aplikasi ke Realm lebih cepat daripada menyiapkan database lainnya. Realm dirancang untuk memberikan kemudahan penggunaan, Data secara langsung dikenali sebagai objek dan queryable oleh kode, menghilangkan kebutuhan ORM yang banyak dengan masalah kinerja dan pemeliharaan.

Contoh CRUD dengan Realm Database pada Android

Sebelumnya pernah membahas mengenai penggunaan SQLite maka pada kali ini contoh implementasi Realm Database pada platform Android dengan membuat aplikasi sederhana yang akan berfungsi untuk operasi CRUD yaitu Create, Read, Update, dan Delete.

1. Update file build.gradle

menambahkan depedency library Realm

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    // tambahkan realm untuk android disini
    compile 'io.realm:realm-android:0.87.5'
}

2. Membuat BaseApp.java

membuat konfigurasi default Realm ke dalam class yang meng-extends Application. Berikut contoh kodenya.

import android.app.Application;

import io.realm.DynamicRealm;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import io.realm.RealmMigration;
import io.realm.RealmSchema;

/**
 * Created by sinaryuda on 6/11/16.
 */
public class BaseApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //konfigurasi Realm
        RealmConfiguration config = new RealmConfiguration.Builder(this)
                .schemaVersion(0) // versi schema database yg digunakan
                .migration(new DataMigration())
                .build();

        Realm.setDefaultConfiguration(config);

    }

    private class DataMigration implements RealmMigration {
        @Override
        public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {

            //mengakses schema database untuk tujuan membuat, mengubah atau menghapus kelas dan kolom.
            RealmSchema schema = realm.getSchema();

            //jika versi 0 maka buat schema baru
            if (oldVersion == 0) {
                // buat kelas buku
                schema.create("buku")
                        .addField("id", int.class)
                        .addField("penulis", String.class)
                        .addField("judul", String.class);
                oldVersion++;
            }
        }
    }
    
}

Tambahkan class BaseApp pada application di AndroidManifest.xml

<application
    android:name=".BaseApp"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

3. Membuat kelas buku dengan RealmObject

Kemudian membuat class model untuk data Buku, Class Buku harus meng-extends kelas RealmObject untuk bisa digunakan pada Realm Database.

import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;

/**
 * Created by sinaryuda on 6/11/16.
 */
public class BukuModel extends RealmObject {

    // untuk menentukan primary key dengan menggunakan anotasi @PrimaryKey
    @PrimaryKey
    private int id;
    private String penulis;
    private String judul;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPenulis() {
        return penulis;
    }

    public void setPenulis(String penulis) {
        this.penulis = penulis;
    }

    public String getJudul() {
        return judul;
    }

    public void setJudul(String judul) {
        this.judul = judul;
    }
}

 

Disini menggunakan anotasi @PrimaryKey untuk mendeklarasikan id sebagai primary key.

@PrimaryKey
private int id;

Realm mendukung anotasi sebagai berikut :

@Required : Memberlakukan pemeriksaan untuk tidak membolehkan nilai null.

@Ignore : Kolom tidak harus disimpan.

@Index : Menambahkan index pencarian pada kolom.

@PrimaryKey : Identifikasi unik pada tiap data pada database. tetapi tidak menyediakan auto-increment

4. Membuat activity untuk menampilkan daftar buku dan CRUD.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Inisialisasi koneksi ke database realm
        dbRealm = Realm.getInstance(this);

    }

    private void createDataBuku(BukuModel model) {
        dbRealm.beginTransaction();
        BukuModel bukuModel = dbRealm.createObject(BukuModel.class);
        int id = dbRealm.where(BukuModel.class).max("id").intValue() + 1;
        bukuModel.setId(id);
        bukuModel.setPenulis(model.getPenulis());
        bukuModel.setJudul(model.getJudul());
        dbRealm.commitTransaction();
        BukuArrayList.add(bukuModel);
        listBukuAdapter.notifyDataSetChanged();
    }

    private void readDataBuku() {
        RealmResults hasil = dbRealm.where(BukuModel.class).findAll();
        dbRealm.beginTransaction();
        if(!hasil.isEmpty()) {
            BukuArrayList.addAll(hasil);
            listBukuAdapter.notifyDataSetChanged();
        }
        dbRealm.commitTransaction();

    }

    private void updateDataBuku(BukuModel model, int posisiIndex, int id) {
        BukuModel editBukuModel = dbRealm.where(BukuModel.class).equalTo("id", id).findFirst();
        dbRealm.beginTransaction();
        editBukuModel.setPenulis(model.getPenulis());
        editBukuModel.setJudul(model.getJudul());
        dbRealm.commitTransaction();
        BukuArrayList.set(posisiIndex,editBukuModel);
        listBukuAdapter.notifyDataSetChanged();
    }

    public void deleteDataBuku(int dataID, int posisiIndex) {
        RealmResults hasil = dbRealm.where(BukuModel.class).equalTo("id", dataID).findAll();
        dbRealm.beginTransaction();
        hasil.remove(0);
        dbRealm.commitTransaction();
        BukuArrayList.remove(posisiIndex);
        listBukuAdapter.notifyDataSetChanged();
    }

}

Untuk kode lengkapnya bisa di lihat di bawah artikel ini.  Dari contoh kode diatas bisa dilihat bagaimana menginisialisasi koneksi ke Realm dan bagaimana untuk menambahkan, mengambil, mengubah, dan menghapus data.

hasil dari contoh applikasi seperti berikut ini :

main activity
Main activity
dialog input
Dialog input
view details
view details

 

Source code :

Tutorial-CRUD-Realm-Database

Incoming search terms: