Menggunakan Room Persistence Libary

Android Developer Guide (pada saat tulisan ini ditulis) menjelaskan bahwa untuk akses ke database SQLite, tidak disarankan menggunakan kelas SQLiteOpenHelper. Lebih lengkapnya bisa dibaca di sini. Sebagai alternatif, disebutkan di situ, sebaiknya menggunakan Room Persistence Library. Library ini sangat sederhana dalam mengakses ke SQLite, dibandingan dengan menggunakan SQLiteOpenHelper. Posting kali ini memberikan contoh penggunaan Room Persistence Library.

Setup

Room persistence library membutuhkan dependency tambahan untuk pemrosesan anotation, dsb. Dependency bisa ditambahakan melalui Android Studio pada menu ‘build’. Tambahkan room-compile dan room-runtime (lihat gambar di bawah).

Kode Program

Jika telah berhasil, saatnya kini menulis kode. Kode program kali ini adalah kode untuk menyimpan data buku. Buku hanya memiliki atribut id buku dan judul buku. Ketika program dijalankan, program akan langsung menampilkan berbagai proses yang terjadi, yang dapat dilihat pada log. Tidak ada UI macem-macem di sini, untuk memudahkan pemahaman.

Buatlah project dengan Empty Activity, kemudian tulis code berikut dalam sebuah package yang sama. Kita mulai dengan mendefinisikan sebuah kelas model, Buku.

import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity
public class Buku {

    @PrimaryKey
    private int bukuId;
    private String  judul;

    public Buku(int bukuId, String judul){
        this.bukuId = bukuId;
        this.judul = judul;
    }
    //getter dan setter tidak ditampilkan    
}

Kelas Buku merupakan acuan untuk membuat tabel. Kelas ini diberi ‘tanda’ atau annotation @Entity, kemudai primary key-nya diberi tanda @PrimaryKey. Selanjutnya, kita definisikan apa yang bisa dilakukan melalui data access object (DAO) dan kita hubungkan kelas buku tersebut dengan project, melalui sebuah kelas AppDatabase. Sehingga, di sini tidak memerlukan statement CREATE TABLE lagi. Berikut adalah kedua file tersebut:

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;

import java.util.List;

@Dao
public interface BukuDAO {

    @Query("SELECT * FROM Buku")
    List<Buku> getAllBuku();

    @Insert
    void insertAll(List<Buku> buku);

    @Insert
    void insertBuku(Buku buku);

    @Delete
    void delete(Buku buku);

    @Query("DELETE FROM Buku")
    void deleteAllBuku();
}
import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(entities = {Buku.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract BukuDAO bukuDAO();
}

Terakhir, kita bisa membuat implementasi dari program untuk menyimpan. Perlu diketahui bahwa untuk menggunakan Room ini, memerlukan resource yang lumayan tinggi, jadi tidak mungkin jika menjalankannya melalui perantara UI Thread. Jadi, untuk memanggil AppDatabase, memerlukan pemanggilan secara asyncrhonous (menggunakan kelas AsynTask) sebagai berkut:

import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Room;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

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

        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                AppDatabase appDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "Buku").build();
                Log.d("TAG","INSERTING");
                appDatabase.bukuDAO().insertAll(getDataBuku());
                appDatabase.bukuDAO().insertBuku(new Buku(3,"Kotlin for Dummies"));
                int recordSize = appDatabase.bukuDAO().getAllBuku().size();

                Log.d("TAG","DISPLAY RECORD SIZE: "+recordSize);
                Log.d("TAG","DELETE ALL DATA ");
                appDatabase.bukuDAO().deleteAllBuku();
                recordSize = appDatabase.bukuDAO().getAllBuku().size();
                Log.d("TAG","DISPLAY RECORD SIZE: "+recordSize);
            }
        });
    }

    private List<Buku> getDataBuku(){
        Buku buku1 = new Buku(1,"Java for Dummies");
        Buku buku2 = new Buku(2,"Android for Dummies");
        List<Buku> listBuku = new ArrayList<>();
        listBuku.add(buku1);listBuku.add(buku2);
        return listBuku;
    }
}

Run proyek, dan lihat hasilnya pada LogCat. Full source code bisa diakses melalui Github.

Happy coding !

Leave a Reply

Your email address will not be published. Required fields are marked *