Cara Ubah Data di Database SQLite dengan Kotlin

Dalam pengembangan aplikasi Android, sering kali diperlukan fitur untuk mengubah data yang sudah ada, seperti data mahasiswa. Artikel ini akan membahas langkah-langkah lengkap untuk mengimplementasikan fitur ini menggunakan Kotlin dan database SQL di Android.

Contoh Proyek dengan Fitur Ubah Data

Langkah 1: Membuat Adapter RecyclerView

Kita akan menggunakan adapter RecyclerView untuk menampilkan daftar mahasiswa dan memberikan tombol untuk mengubah data.

Mahasiswa_Item.kt

// Mahasiswa_Item.kt

class Mahasiswa_Item(
    val ini: Context,
    val id_mahasiswa: MutableList<String>,
    val nama: MutableList<String>,
    val nim: MutableList<String>,
    val foto: MutableList<Int>
) : RecyclerView.Adapter<Mahasiswa_Item.ViewHolder>() {
    // ViewHolder untuk menyimpan elemen tampilan setiap item RecyclerView
    class ViewHolder(ItemView: View) : RecyclerView.ViewHolder(ItemView){
        val txt_nama:TextView = ItemView.findViewById(R.id.txt_nama)
        val txt_nim:TextView = ItemView.findViewById(R.id.txt_nim)
        val iv_foto:ImageView = ItemView.findViewById(R.id.iv_foto)
        val btn_hapus:Button = ItemView.findViewById(R.id.btn_hapus)
        val btn_ubah:Button = ItemView.findViewById(R.id.btn_ubah)
    }

    // Metode onCreateViewHolder untuk membuat ViewHolder baru
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Mahasiswa_Item.ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.mahasiswa_item, parent, false)
        return ViewHolder(view)
    }

    // Metode getItemCount untuk mendapatkan jumlah item dalam dataset
    override fun getItemCount(): Int {
        return nama.size
    }

    // Metode onBindViewHolder untuk mengikat data ke ViewHolder di posisi yang ditentukan dalam RecyclerView
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.txt_nama.text = nama[position]
        holder.txt_nim.text = nim[position]
        holder.iv_foto.setImageResource(foto[position])

        // Tambahkan OnClickListener untuk tombol ubah
        holder.btn_ubah.setOnClickListener {
            val id_mahasiswa_terpilih = id_mahasiswa[position]
            val intent = Intent(ini, Mahasiswa_Ubah::class.java)
            intent.putExtra("id_mahasiswa_terpilih", id_mahasiswa_terpilih)
            ini.startActivity(intent)
        }
    }
}

mahasiswa_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_margin="5dp">

    <ImageView
        android:id="@+id/iv_foto"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@drawable/noimage"
        android:scaleType="centerCrop"></ImageView>

    <TextView
        android:id="@+id/txt_nim"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NIM Mahasiswa"
        android:textSize="18sp"
        android:textColor="#333333"
        android:layout_marginBottom="5dp"></TextView>

    <TextView
        android:id="@+id/txt_nama"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nama Mahasiswa"
        android:textSize="16sp"
        android:textColor="#333333"
        android:layout_marginBottom="5dp"></TextView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="5dp"
        android:gravity="center">
        <Button
            android:id="@+id/btn_hapus"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hapus"
            android:layout_marginRight="5dp"></Button>
        <Button
            android:id="@+id/btn_ubah"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text="Ubah"></Button>
    </LinearLayout>
</LinearLayout>

Langkah 2: Mengubah Data Mahasiswa

Di Activity Mahasiswa_Ubah.kt, kita akan mengizinkan pengguna untuk mengubah data mahasiswa yang dipilih.

Mahasiswa_Ubah.kt

// Mahasiswa_Ubah.kt

class Mahasiswa_Ubah : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.mahasiswa_ubah)

        // Dapatkan id_mahasiswa_terpilih dari intent
        val id_mahasiswa_terpilih:String = intent.getStringExtra("id_mahasiswa_terpilih").toString()

        // Hubungkan ke database
        val dbkampus: SQLiteDatabase = openOrCreateDatabase("kampus", MODE_PRIVATE, null)

        // Ambil data mahasiswa berdasarkan id_mahasiswa_terpilih
        val ambil:Cursor = dbkampus.rawQuery("SELECT * FROM mahasiswa WHERE id_mahasiswa='$id_mahasiswa_terpilih'", null )

        // Pastikan kursor berada pada posisi yang valid
        if(ambil.moveToFirst()){
            // Ambil data dari cursor
            val isi_nim:String = ambil.getString(1)
            val isi_nama:String = ambil.getString(2)

            val edt_nim:EditText = findViewById(R.id.edt_nim)
            val edt_nama:EditText = findViewById(R.id.edt_nama)
            val btn_simpan:Button = findViewById(R.id.btn_simpan)

            // Isi data ke EditText
            edt_nim.setText(isi_nim)
            edt_nama.setText(isi_nama)

            // Tambahkan OnClickListener untuk tombol simpan
            btn_simpan.setOnClickListener {
                val nim_baru:String = edt_nim.text.toString()
                val nama_baru:String = edt_nama.text.toString()

                // Update data mahasiswa ke database
                val ngubah = dbkampus.rawQuery("UPDATE mahasiswa SET nim_mahasiswa='$nim_baru', nama_mahasiswa='$nama_baru' WHERE id_mahasiswa='$id_mahasiswa_terpilih'", null)
                ngubah.moveToNext()

                // Kembalikan ke Activity Mahasiswa setelah mengubah data
                val pindah:Intent = Intent(this, Mahasiswa::class.java)
                startActivity(pindah)
            }
        } else {
            Log.d("Mahasiswa", "Maaf, terjadi kesalahan haikal")
        }
    }
}

mahasiswa_ubah.xml

<?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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp"
    tools:context=".Mahasiswa_Ubah">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ubah Mahasiswa"
        android:textSize="20sp"
        android:layout_marginBottom="20dp"
        android:layout_gravity="center_horizontal"></TextView>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:text="NIM Mahasiswa"></TextView>
    <EditText
        android:id="@+id/edt_nim"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:hint="Masukkan NIM"></EditText>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:text="Nama Mahasiswa"></TextView>
    <EditText
        android:id="@+id/edt_nama"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="30dp"
        android:hint="Masukkan Nama"></EditText>
    <Button
        android:id="@+id/btn_simpan"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SIMPAN"></Button>
</LinearLayout>

Langkah 3: Menampilkan Data Mahasiswa

Di Activity Mahasiswa.kt, kita akan menampilkan daftar mahasiswa terupdate.

package com.android.kampus

import android.content.Intent
import android.database.sqlite.SQLiteDatabase
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.LinearLayout
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class Mahasiswa : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.mahasiswa)

        val rv_mahasiswa:RecyclerView = findViewById(R.id.rv_mahasiswa)

        val id_mahasiswa:MutableList<String> = mutableListOf()
        val nama:MutableList<String> = mutableListOf()
        val nim:MutableList<String> = mutableListOf()
        val foto:MutableList<Int> = mutableListOf()

        //panggil database kampus
        val dbkampus:SQLiteDatabase = openOrCreateDatabase("kampus", MODE_PRIVATE, null)

        //gali data mahasiswa
        val gali_mahasiswa = dbkampus.rawQuery("SELECT * FROM mahasiswa", null)

        while (gali_mahasiswa.moveToNext())
        {
            id_mahasiswa.add(gali_mahasiswa.getString(0))
            nama.add(gali_mahasiswa.getString(1))
            nim.add(gali_mahasiswa.getString(2))
            foto.add(R.drawable.noimage)
        }

        val mi = Mahasiswa_Item(this,   id_mahasiswa, nama, nim, foto)

        rv_mahasiswa.adapter = mi
        rv_mahasiswa.layoutManager = GridLayoutManager (this, 2)

        //btn_tambah
        val btn_tambah:Button = findViewById(R.id.btn_tambah)
        btn_tambah.setOnClickListener {
            val pindah:Intent = Intent(this, Mahasiswa_Tambah::class.java)
            startActivity(pindah)
        }
    }
}

mahasiswa.xml

<?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="wrap_content"
    android:orientation="vertical"
    tools:context=".Mahasiswa"
    android:padding="10dp">
    <Button
        android:id="@+id/btn_tambah"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Tambah Mahasiswa"
        android:layout_margin="10dp"></Button>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_mahasiswa"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@layout/mahasiswa_item"></androidx.recyclerview.widget.RecyclerView>
</LinearLayout>

Dengan langkah-langkah di atas, pengguna akan dapat dengan mudah mengubah data mahasiswa dalam aplikasi Android. Pastikan untuk melakukan manajemen database yang baik dan memberikan pengalaman pengguna yang baik saat menggunakan aplikasi Anda.