Cara Membuat Fungsi Delete dan Update pada SQLite Database


Assalamualaikum Warahmatullahi Wabarakatuh.

Pada tutorial ini, kita akan belajar Cara Membuat Fungsi Delete dan Update pada SQLite Database, tutorial ini merupakan materi lanjutan dari tutorial yang saya bahas sebelumnya, yaitu Cara Menampilka Data SQLite pada RecyclerView, jadi saya sarankan kalian sudah mengikuti dan juga membuat project tersebut sebelumnya.


Pada materi yang akan kita pelajari hari ini, kita akan belajar cara menghapus dan juga mengedit data yang tersimpan pada SQLite Database, sebelumnya kita sudah belajar cara menampilkan dat SQLite pada RecyclerView, pada tutorial ini, kita dapat menghapus dan update data tersebut melalui RecyclerView.

Untuk itu kita akan menambahkan Menu Navigasi seperti menu OverFlow pada layout/list item RecyclerView tersebut. untuk menampikan menu pilihan pada Menu Overflow, kita akan menggunakan Menu Popup untuk menampilkan menu pilihan berupa Delete dan Update pada masing-masing item.

Cara Membuat Fungsi Delete dan Update pada SQLite Database

Pertama kita perlu membuat menunya terlebih dahulu, caranya : Klik kanan pada direktori res > New > Android resource directory. lalu berinama file tersebut, misalnya "popup_menu". setelah itu klik Ok.

Selanjutnya buat menu tersebut dengan menggunakan kode xml, untuk membuatnya, kita perlu menambahkan tag <item> dan juga beberapa atribut tambahan lalinnya, seperti id, title, dsb.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/delete"
        android:title="Delete"/>

    <item android:id="@+id/update"
        android:title="Update"/>

</menu>
Buat Icon Menu Overflownya, klik kanan pada dir res > New > Image Asset.


Selanjnya kita edit layout design pada RecyclerView, buka file view_design.xml, kita akan menambahkan ImgeButton sebagai menu navigasi utuk icon tersebut, kalian edit menjadi seperti berikut ini:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/item_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/image"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        app:srcCompat="@drawable/unpi" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_toLeftOf="@+id/overflow"
        android:layout_toRightOf="@+id/image"
        android:gravity="center"
        android:orientation="vertical">

        <TextView
            android:id="@+id/name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dp"
            android:text="Nama"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/NIM"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:text="NIM"
            android:textSize="14sp" />
        
        <TextView
            android:id="@+id/jurusan"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:text="Jurusan"
            android:textSize="14sp" />
    </LinearLayout>

    <ImageButton
        android:id="@+id/overflow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:background="#FFF9F9F9"
        app:srcCompat="@drawable/ic_overflow" />

</RelativeLayout>
View:



A.Menghapus Data Dari Database

1) Buka RecyclerViewAdapter kalian, lalu tambahkan Context dan juga ImageButton didalam class ViewHolder, seperti ini:
public class RecyclerViewAdapter extends RecyclerView.Adapter{

    private ArrayList namaList; //Digunakan untuk Nama
    private ArrayList jurusanList; //Digunakan untuk Jurusan
    private ArrayList nimList; //Digunakan untuk Jurusan
    private Context context; //Membuat Variable Context

    //Membuat Konstruktor pada Class RecyclerViewAdapter
    RecyclerViewAdapter(ArrayList namaList, ArrayList jurusanList, ArrayList nimList){
        this.namaList = namaList;
        this.jurusanList = jurusanList;
        this.nimList = nimList;
    }

    //ViewHolder Digunakan Untuk Menyimpan Referensi Dari View-View
    class ViewHolder extends RecyclerView.ViewHolder{

        private TextView Nama, Jurusan, Nim;
        private ImageButton Overflow;

        ViewHolder(View itemView) {
            super(itemView);

            //Mendapatkan Context dari itemView yang terhubung dengan Activity ViewData
            context = itemView.getContext();

            //Menginisialisasi View-View untuk kita gunakan pada RecyclerView
            Nama = itemView.findViewById(R.id.name);
            Jurusan = itemView.findViewById(R.id.jurusan);
            Overflow = itemView.findViewById(R.id.overflow);
            Nim = itemView.findViewById(R.id.NIM);
        }
    }
2) Lalu didalam method onBindViewHoler(), tambahkan onClickListener pada ImageButton tersebut, didalamnya akan kita tambahkan Popup menu pada onClicListener tersebut, seperti berikut ini:
public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
        //Memanggil Nilai/Value Pada View-View Yang Telah Dibuat pada Posisi Tertentu
        final String Nama = namaList.get(position);//Mengambil data (Nama) sesuai dengan posisi yang telah ditentukan
        final String Jurusan = jurusanList.get(position);//Mengambil data (Jurusan) sesuai dengan posisi yang telah ditentukan
        final String NIM = nimList.get(position);//Mengambil data (NIM) sesuai dengan posisi yang telah ditentukan
        holder.Nama.setText(Nama);
        holder.Jurusan.setText(Jurusan);
        holder.Nim.setText(NIM);

        //Mengimplementasikan Menu Popup pada Overflow (ImageButton)
        holder.Overflow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {
                //Membuat Instance/Objek dari PopupMenu
                PopupMenu popupMenu = new PopupMenu(view.getContext(), view);
                popupMenu.inflate(R.menu.popup_menu);
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()){
                            case R.id.delete:
                                //Menghapus Data Dari Database
                                DBMahasiswa getDatabase = new DBMahasiswa(view.getContext());
                                SQLiteDatabase DeleteData = getDatabase.getWritableDatabase();
                                //Menentukan di mana bagian kueri yang akan dipilih
                                String selection = DBMahasiswa.MyColumns.NIM + " LIKE ?";
                                //Menentukan Nama Dari Data Yang Ingin Dihapus
                                String[] selectionArgs = {holder.Nim.getText().toString()};
                                DeleteData.delete(DBMahasiswa.MyColumns.NamaTabel, selection, selectionArgs);

                                //Menghapus Data pada List dari Posisi Tertentu
                                int position = nimList.indexOf(NIM);
                                nimList.remove(position);
                                notifyItemRemoved(position);
                                Toast.makeText(view.getContext(),"Data Dihapus",Toast.LENGTH_SHORT).show();
                                break;
                                
                            case R.id.update:
                                //Statement Update
                                break;
                        }
                        return true;
                    }
                });
                popupMenu.show();
            }
        });
    }
Penjelasan:

Pada menu overflow yang sudah kita buat tadi sebelumnya, menggunakan ImageButton, saat menu tersebut diklik, maka akan muncul 2 buah menu Popup, yaitu Delete dan Update.

Untuk menghapus Data dari Database SQLite, pertama kita hapus membuat Instance/Objek dan juga context dengan class database kita, yaitu DBMahasiswa, dengan parameter view.getContext().

Pada variable selection, kita menentukan Bagian Nama Query yang akan dipilih, pada contoh tersebut kita memilih Kolom NIM, sebagai acuan untuk menghapus data. Jadi artinya, kita dapat menghapus salah satu data dari database berdasarkan NIM item yang dipilih.

Pada variable Array selectionArgs, digunakan untuk menentukan NIM dari Data yang akan dihapus, NIM tersebut didapat dari masing-masing item, terdantung posisinya. Jadi kita dapat menghapus data tersebut berdasarkan NIM pada item didalam RecyclerView.

Dan yang terakhir, digunakan untuk menghapus Item dari RecyclerView, supaya saat kita mengklik menu Delete, maka secara realtime item yang kita pilih pada RecyclerView akan menghilang.

Demo:




B.Mengedit Data Dari Database

1) Pertama kita akan membuat Activity baru, berinama "UpdateActivity", activity tersebut akan kita gunakan untuk mengedit data dari Database, disini kita hanya akan mengupdate atau mengubah Nama, NIM dan Jurusan pada setiap Item yang dipilih.

Untuk itu kalian buat activitynya seperti berikut ini:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    android:orientation="vertical"
    tools:context="android.cianjur.developer.net.sqliteexample.UpdateActivity">

    <EditText
        android:id="@+id/new_nim"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="NIM Baru"
        android:inputType="textPersonName" />

    <EditText
        android:id="@+id/new_nama"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Nama Baru"
        android:inputType="textPersonName" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="6dp"
        android:text="Fakultas/Jurusan:" />

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/new_jurusan"
        android:entries="@array/daftar_jurusan"
        android:padding="15dp">

    </Spinner>

    <Button
        android:id="@+id/new_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Simpan Data Baru" />
</LinearLayout>
View:


2) Buka kembali RecyclerViewAdapter, tambahkan baris kode berikut ini pada Item didalam Popup menu:
case R.id.update:
   Intent dataForm = new Intent(view.getContext(), UpdateActivity.class);
   dataForm.putExtra("SendNIM", holder.Nim.getText().toString());
   dataForm.putExtra("SendNama", holder.Nama.getText().toString());
   context.startActivity(dataForm);
   ((Activity)context).finish();
   break;
Disana kita menggunakan Intent untuk berpindah activity, serta Mempassing/Kirim Data, NIM pada activity selanjutnya, untuk kita kirim pada ActivityUpdate, NIM tersebut digunakan untuk menentukan Data mana yang ingin di Update.

Lalu kita panggil variable context yang sudah kita buat tadi sebelumnya, untuk mengeksekusi Intent tersebut.

3) Buka file UpdateActivity.java, masukan source code berikut ini:
package android.cianjur.developer.net.sqliteexample;

import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class UpdateActivity extends AppCompatActivity {

    private DBMahasiswa MyDatabase;
    private EditText NewNIM, NewNama;
    private Spinner NewJurusan;
    private String getNewNIM, getNewNama, getNewJurusan;
    private Button Update;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update);
        getSupportActionBar().setTitle("Masukan Data Baru");
        MyDatabase = new DBMahasiswa(getBaseContext());
        NewNIM = findViewById(R.id.new_nim);
        NewNama = findViewById(R.id.new_nama);
        NewJurusan = findViewById(R.id.new_jurusan);

        //Menerima Data Nama dan NIM yang telah dipilih Oleh User untuk diposes
        NewNama.setText(getIntent().getExtras().getString("SendNama");
        NewNim.setText(getIntent().getExtras().getString("SendNIM");

        Update = findViewById(R.id.new_data);
        Update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setUpdateData();
                startActivity(new Intent(UpdateActivity.this, ViewData.class));
                finish();
            }
        });
    }

    private void setUpdateData(){
        getNewNIM = NewNIM.getText().toString();
        getNewNama = NewNama.getText().toString();
        getNewJurusan = NewJurusan.getSelectedItem().toString();


        SQLiteDatabase database = MyDatabase.getReadableDatabase();

        //Memasukan Data baru pada 3 kolom (NIM, Nama dan Jurusan)
        ContentValues values = new ContentValues();
        values.put(DBMahasiswa.MyColumns.Nama, getNewNama);
        values.put(DBMahasiswa.MyColumns.Jurusan, getNewJurusan);
        values.put(DBMahasiswa.MyColumns.NIM, getNewNIM);

        //Untuk Menentukan Data/Item yang ingin diubah, berdasarkan NIM
        String selection = DBMahasiswa.MyColumns.NIM + " LIKE ?";
        String[] selectionArgs = {GetNIM};
        database.update(DBMahasiswa.MyColumns.NamaTabel, values, selection, selectionArgs);
        Toast.makeText(getApplicationContext(), "Berhasil Diubah", Toast.LENGTH_SHORT).show();
    }
}
Projectnya Bisa Kalian Download di Github Saya.

Terimakasih atas kunjungannya, Semoga tutorial yang saya berikan bisa bermanfaat untuk kalian semua, jika ada yang ingin ditanyakan, silakan kontak saya atau isi komentar dibawah ini, selebihnya mohon maaf bila ada kesalahan.

Wassalamualaikum Warahmatullahi Wabarakatuh.

Wildan M Athoillah
Wildan M Athoillah Blogger dan spesialis pembuat aplikasi android.