Belajar CRUD Room Database di Android : Membuat Fungsi Insert Data

Melanjutkan tutorial saya tentang membuat aplikasi CRUD sederhana menggunakan Room Database library di Android. Di dua tutorial sebelumnya kita sudah belajar tentang cara mengimport Room library ke project Android kita, dan juga belajar untuk membuat tiga buah komponen utama dari Room Database library (Entity, Data Access Object, dan Database). Kali ini kita akan langsung belajar untuk mengimplementasikan fitur Create / Insert data menggunakan Room Database library. Bagaimana caranya? Mari kita simak di bawah ini 🙂

Tutorial ini berhubungan dengan tutorial-tutorial tentang Room database library sebelumnya, karena itu saya sarankan untuk membaca tutorial-tutorial berikut sebelum melanjutkan.

Pre-Requisites :

  1. Membuat Project Baru di Android Studio
  2. Mengimport Room Library di Android Studio
  3. Membuat Entity, DAO, Database menggunakan Room library
  4. (Optional)Tutorial Lengkap SQLite

Perlu kita ingat, Room library pada dasarnya hanyalah sebuah abstraction / interface yang memudahkan kita dalam menggunakan database di Android, layer bagian dalam dari Room database library adalah database SQLite seperti biasa. Karena itu ada baiknya jika kalian memahami syntax SQL dan konsep dasar SQLite di Android.

Membuat Fitur Insert Data Menggunakan Room Database Library

Untuk membuat fitur create/insert data, yang kita butuhkan adalah sebuah form untuk menginputkan data-data barang berupa nama barangmerk barang, dan harga barang. Supaya singkat dan mudah dipahami saya tidak akan meng-copypaste-kan kode XML nya di sini, XML layout nya sederhananya silahkan bisa dilihat di sini.

Setelah XML untuk create data dibuat. Kita akan menambahkan method untuk insert data pada interface BarangDAO yang berfungsi sebagai Data Access Object. Di interface BarangDAO.java inilah nantinya kita akan menempatkan method-method yang bisa kita gunakan untuk mengakses database secara langsung, termasuk method insert Barang.

Maka buka file BarangDAO.java dan masukkan kode untuk insert data seperti di bawah ini :

package co.twoh.roomtutorial.data;

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;

import co.twoh.roomtutorial.model.Barang;

/**
 * Created by Herdi_WORK on 21.01.18.
 */

@Dao
public interface BarangDAO {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertBarang(Barang barang);

}

Bisa dilihat di kodingan di atas, kita menggunakan annotation @Insert untuk melakukan insert data, annotation tersebut sudah bawaan dari Room database library, sehingga kita tidak perlu menuliskan raw SQL query untuk create data. Setelah itu ada parameter onConflict yang akan menandakan strategy apa yang akan dipilih saat terjadi conflict pada proses insert data, dalam kasus ini kita menggunakan strategy REPLACE yang berarti jika ada konflik / data yang ingin kita masukkan di database sudah exist. Maka data yang lama / existing akan di-replace dengan data yang baru kita insert.

Itulah syntax yang kita gunakan untuk melakukan insert data pada Room database library, simpel sekali bukan ? 🙂

Sekarang untuk penggunaannya, pada Activity create data kalian. Modifikasi kodingan kalian menjadi logic flow seperti di bawah ini :

/**
 * Created by Herdi_WORK on 21.01.18.
 */

public class RoomCreateActivity extends AppCompatActivity {

    private AppDatabase db;

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

        // initiate pemanggilan Room database
        db = Room.databaseBuilder(getApplicationContext(),
                AppDatabase.class, "barangdb").build();

        final EditText etNamaBarang   = findViewById(R.id.et_namabarang);
        final EditText etMerkBarang   = findViewById(R.id.et_merkbarang);
        final EditText etHargaBarang  = findViewById(R.id.et_hargabarang);
        Button btSubmit         = findViewById(R.id.bt_submit);

        btSubmit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Barang b = new Barang();
                    b.setHargaBarang(etHargaBarang.getText().toString());
                    b.setMerkBarang(etMerkBarang.getText().toString());
                    b.setNamaBarang(etNamaBarang.getText().toString());
                    insertData(b);
                }
        });        
    }

    private void insertData(final Barang barang){

        new AsyncTask<Void, Void, Long>(){
            @Override
            protected Long doInBackground(Void... voids) {
                // melakukan proses insert data
                long status = db.barangDAO().insertBarang(barang);
                return status;
            }

            @Override
            protected void onPostExecute(Long status) {
                Toast.makeText(RoomCreateActivity.this, "status row "+status, Toast.LENGTH_SHORT).show();
            }
        }.execute();
    }

}

Jika kalian lihat, sebagian besar kodingan di atas adalah untuk menyambungkan antara form XML dengan Activity .java nya. Kita menerima inputan nama barang, merk dan harga dari form, kemudian memasukkannya ke dalam object Entity barang yang sudah kita buat di tutorial sebelumnya.

Setelah itu untuk proses insert data barangnya sendiri, kita hanya perlu memanggil BarangDAO dari AppDatabase dan melakukan eksekusi fungsi insertData(Barang) yang baru saja kita buat di atas :

db.barangDAO().insertBarang(barang);

Sebagai catatan juga, karena fungsi insert data pada Room library adalah fungsi async yang tidak bisa dieksekusi pada main thread maka kita menggunakan AsyncTask untuk menjalankan fungsi tersebut. Cara lebih lanjutnya bisa menggunakan RxJava dan hal ini juga sebenarnya bisa kita akali, tapi itu akan saya bahas di tutorial selanjutnya saja.

That’s all, hanya itu yang perlu kita lakukan untuk membuat fungsi insert Barang pada Room database library, simpel sekali bukan ? Sekarang mari kita ke demo-nya

Demo

Flow Insert data pada Room Database Library

Flow Insert data pada Room Database Library | (c) Instagram

Flow nya sendiri bisa kita lihat seperti gambar di atas. Kita hanya memasukkan data pada form dan kemudian menekan tombol Submit. Jika sudah muncul Toast status seperti di atas, menandakan datanya sudah berhasil masuk.

Thats all, kita sudah berhasil melakukan step pertama (Create) pada series tutorial CRUD menggunakan Room database library.

Untuk cara melihat data yang sudah kita inputkan pada aplikasi menggunakan Room Database library ini akan saya bahas di tutorial selanjutnya.

Semoga berguna, untuk source code lengkap nya, kalian bisa download di GitHub saya. Jangan lupa untuk follow dan star juga ya. 😀

Jangan sungkan untuk bertanya apabila ada yang kurang mengerti, silahkan tulis lewat komentar di bawah. 😉





Download aplikasi kami di Google Play Store


Tutorial Menarik Lainnya :

Leave a Reply