Membuat Aplikasi CRUD Sederhana Menggunakan Android Studio dengan Database SQLite

Indrayana Wibawa
7 min readJun 7, 2021

--

sumber gambar : androidpolice.com

Hai teman-teman, hari ini kita akan membuat aplikasi CRUD (Create, Read, Update, Delete). Untuk membuat aplikasi android CRUD kita akan menggunakan Android Studio. Android Studio adalah sebuah Integrated Development Environment (IDE) untuk pengembangan aplikasi android. Android Studio bisa kita dapatkan secara gratis. Untuk databasenya kita akan menggunakan SQLite. Berbeda dengan MySql kita tidak perlu mendownload secara terpisah, SQLite sudah ada di dalam Android Studio.

Membuat Aplikasi CRUD

Pertama-tama buka Android Studio, di sini saya menggunakan Android Studio versi 4.1.

Buat projek baru. Pilih Template Empty Activity lalu klik Next.

Masukkan nama project dan pilih tempat penyimpanan project atau bisa ditinggalkan default saja. Setelah itu pilih bahasa pemrograman yang akan dipakai, di sini saya akan menggunakan bahasa pemrograman Java. Lalu, pilih API yang akan dipakai, saya menggunakan API 16. Jika sudah klik Finish.

Kita akan menggunakan MainActivity sebagai form Login sederhana. Buatlah tampilan untuk form Login pada activity_main.xml dengan source code berikut

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<ImageView
android:id="@+id/imageView"
android:layout_width="159dp"
android:layout_height="162dp"
android:layout_marginStart="126dp"
android:layout_marginLeft="126dp"
android:layout_marginTop="41dp"
android:layout_marginEnd="126dp"
android:layout_marginRight="126dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/logo_unikom_kuning" />

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="19dp"
android:layout_marginLeft="19dp"
android:layout_marginTop="35dp"
android:layout_marginEnd="19dp"
android:layout_marginRight="19dp"
android:text="Ujian Tengah Semester AKB 2021"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />

<EditText
android:id="@+id/editUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:ems="10"
android:hint="Username"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />

<EditText
android:id="@+id/editPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:ems="10"
android:hint="Password"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editUsername" />

<Button
android:id="@+id/btnLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="31dp"
android:text="Login"
app:backgroundTint="#955A5959"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editPassword" />

<Button
android:id="@+id/btnLogout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="45dp"
android:layout_marginBottom="153dp"
android:text="Logout"
app:backgroundTint="#955A5959"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnLogin" />
</androidx.constraintlayout.widget.ConstraintLayout>

Maka hasil tampilan akan seperti ini

Setelah itu kita berpindah ke MainActivity.java. Masukkan source code berikut

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
private EditText username, password;
private Button tmblLogin, tmblLogout;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username = (EditText) findViewById(R.id.editUsername);
password = (EditText) findViewById(R.id.editPassword);
tmblLogin = (Button) findViewById(R.id.btnLogin);
tmblLogout = (Button) findViewById(R.id.btnLogout);

tmblLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nama = username.getText().toString();
String pass = password.getText().toString();
if (nama.isEmpty() || pass.isEmpty()){
showErrorLogin();
} else {
if (nama.equals("admin") && pass.equals("admin")){
successLogin();
} else {
errorLogin();
}
}
}
});
tmblLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.exit(0);
}
});
}
public void showErrorLogin(){
Toast.makeText(this, "Login Gagal", Toast.LENGTH_SHORT).show();
}
public void successLogin(){
Toast.makeText(this, "Login Berhasil", Toast.LENGTH_SHORT).show();
}
public void errorLogin(){
Toast.makeText(this, "Login Gagal", Toast.LENGTH_SHORT).show();
}
}

Di sini kita hanya menggunakan form login sederhana dengan username : admin dan password : admin. Kita juga membuat notifikasi Login Gagal ketika username dan password kosong atau salah, Login Berhasil ketika username dan password benar.

Setelah itu, buatlah sebuah Java Class baru dengan cara

Berikan nama DBHelper, lalu tekan Enter

DBHelper.java ini adalah proses untuk membuat database SQLite. Masukkan source code berikut ke DBHelper.java

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "biodata.db";
public static final String TABLE_NAME = "tabel_pegawai";
public static final int DATABASE_VERSION = 1;
public static final String COL_1 = "ID";
public static final String COL_2 = "NAMA";
public static final String COL_3 = "JABATAN";
public static final String COL_4 = "ALAMAT";

public DBHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
SQLiteDatabase db = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE tabel_pegawai(id VARCHAR(8) PRIMARY KEY, "
+ "nama TEXT NULL, "
+ "jabatan TEXT NULL, "
+ "alamat TEXT NULL);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
//Simpan Data
public boolean insertData(String id, String nama, String jabatan, String alamat){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, id);
contentValues.put(COL_2, nama);
contentValues.put(COL_3, jabatan);
contentValues.put(COL_4, alamat);
long result = db.insert(TABLE_NAME, null, contentValues);
if (result == -1)
return false;
else
return true;
}
//Ambil Data
public Cursor getAllData(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("SELECT * FROM tabel_pegawai", null);
return res;
}
//Ubah Data
public boolean updateData(String id, String nama, String jabatan, String alamat){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, id);
contentValues.put(COL_2, nama);
contentValues.put(COL_3, jabatan);
contentValues.put(COL_4, alamat);
db.update(TABLE_NAME, contentValues, "ID = ?", new String[]{id});
return true;
}
//Hapus Data
public int deleteData(String nim){
SQLiteDatabase db = this.getWritableDatabase();
return db.delete(TABLE_NAME, "ID = ?", new String[]{nim});
}
}

Di sini kita membuat database dengan nama biodata dan sebuah tabel dengan nama tabel_pegawai. Memiliki 4 kolom dengan ID sebagai Primary Keynya.

Lalu, kita buat Activity baru dengan cara

Berikan nama DataPegawai lalu klik Finish

Buat tampilan untuk Form Pegawai di activity_data_pegawai.xml dengan source code berikut

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DataPegawai">

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="104dp"
android:layout_marginLeft="104dp"
android:layout_marginTop="33dp"
android:layout_marginEnd="104dp"
android:layout_marginRight="104dp"
android:text="Form Biodata Pegawai"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText
android:id="@+id/editID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="17dp"
android:ems="10"
android:hint="ID Pegawai"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />

<EditText
android:id="@+id/editNama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="17dp"
android:ems="10"
android:hint="Nama Lengkap"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editID" />

<EditText
android:id="@+id/editJabatan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="17dp"
android:ems="10"
android:hint="Jabatan"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editNama" />

<EditText
android:id="@+id/editAlamat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="17dp"
android:ems="10"
android:hint="Alamat"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editJabatan" />

<Button
android:id="@+id/btnSimpan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="21dp"
android:text="Simpan Data"
app:backgroundTint="#955A5959"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editAlamat" />

<Button
android:id="@+id/btnEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Edit Data"
app:backgroundTint="#955A5959"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnSimpan" />

<Button
android:id="@+id/btnHapus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Hapus Data"
app:backgroundTint="#955A5959"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnEdit" />

<Button
android:id="@+id/btnTampil"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginBottom="148dp"
android:text="Tampilkan Seluruh Data"
app:backgroundTint="#955A5959"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnHapus" />
</androidx.constraintlayout.widget.ConstraintLayout>

Maka tampilannya akan seperti ini

Agar kita bisa mengakses Form Pegawai, masukkan source berikut ke dalam bagian import di MainActivity.java

import android.content.Intent;

Lalu masukkan source berikut ke dalam method successLogin()

Intent intent = new Intent(MainActivity.this, DataPegawai.class);
startActivity(intent);

Lakukan tes pada aplikasi dengan menekan Shift + F10, masukkan username dan password, lalu klik Login. Jika berhasil setelah menekan tombol Login kita akan berpindah ke Form Pegawai. Lakukan pengecekan rutin setiap kali kita melakukan perubahan pada projek kita guna menghindari error yang menumpuk sehingga kita bisa mengatasi error dengan mudah.

Masukkan source code berikut ke dalam DataPegawai.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.app.AlertDialog;
import android.database.Cursor;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class DataPegawai extends AppCompatActivity {
DBHelper myDb;
EditText edID, edNama, edJabatan, edAlamat;
Button btnTambahData;
Button btnTampilData;
Button btnEditData;
Button btnHapusData;

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

myDb = new DBHelper(this);
edID = (EditText) findViewById(R.id.editID);
edNama = (EditText) findViewById(R.id.editNama);
edJabatan = (EditText) findViewById(R.id.editJabatan);
edAlamat = (EditText) findViewById(R.id.editAlamat);
btnTambahData = (Button) findViewById(R.id.btnSimpan);
btnEditData = (Button) findViewById(R.id.btnEdit);
btnHapusData = (Button) findViewById(R.id.btnHapus);
btnTampilData = (Button) findViewById(R.id.btnTampil);

addData();
viewAll();
updateData();
deleteData();
}
//Simpan data
public void addData(){
btnTambahData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isInserted = myDb.insertData(edID.getText().toString(),
edNama.getText().toString(),
edJabatan.getText().toString(),
edAlamat.getText().toString());
if (isInserted == true)
Toast.makeText(DataPegawai.this, "Data Berhasil Disimpan", Toast.LENGTH_LONG).show();
else
Toast.makeText(DataPegawai.this, "Data Gagal Disimpan", Toast.LENGTH_LONG).show();
}
});
}
//Edit Data
public void updateData(){
btnEditData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isUpdate = myDb.updateData(edID.getText().toString(),
edNama.getText().toString(),
edJabatan.getText().toString(),
edAlamat.getText().toString());
if (isUpdate == true)
Toast.makeText(DataPegawai.this, "Data Berhasil Diperbaharui", Toast.LENGTH_LONG).show();
else
Toast.makeText(DataPegawai.this, "Data Gagal Diperbaharui", Toast.LENGTH_LONG).show();
}
});
}
//Hapus Data
public void deleteData(){
btnHapusData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer deletedRows = myDb.deleteData(edID.getText().toString());
if (deletedRows > 0)
Toast.makeText(DataPegawai.this, "Data Berhasil Dihapus", Toast.LENGTH_LONG).show();
else
Toast.makeText(DataPegawai.this, "Data Gagal Dihapus", Toast.LENGTH_LONG).show();
}
});
}
//Tampil Seluruh Data
public void viewAll(){
btnTampilData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor res = myDb.getAllData();
if (res.getCount() == 0) {
showMessage("Error", "Nothing Found");
return;
}
StringBuffer buffer = new StringBuffer();
while (res.moveToNext()){
buffer.append("ID : " + res.getString(0)+"\n");
buffer.append("NAMA : " + res.getString(1)+"\n");
buffer.append("JABATAN : " + res.getString(2)+"\n");
buffer.append("ALAMAT : " + res.getString(3)+"\n");
}
showMessage("Data", buffer.toString());
}
});
}
//Alert Dialog
public void showMessage(String title, String Message){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setTitle(title);
builder.setMessage(Message);
builder.show();
}
}

Setelah itu lakukan tes pada aplikasi untuk masing-masing fungsi CRUD. Pertama kita akan lakukan tes untuk fungsi Tambah Data. Isi Form Pegawai sesuai yang anda inginkan, lalu klik tombol SIMPAN DATA

Tekan tombol TAMPILKAN SELURUH DATA untuk melihat apakah data tersimpan atau tidak

Seperti yang terlihat data berhasil tersimpan

Kemudian kita akan melakukan tes pada Edit Data. Ubah nama dari data yang tadi kita masukkan

Lalu klik tombol EDIT DATA

Data berhasil diubah

Terakhir masukkan ID pegawai lalu tekan tombol HAPUS DATA. Lalu tampilkan data maka akan muncul pesan

Penutup

Sekian yang bisa saya sampaikan. Semoga bermanfaat untuk kita semua. Saya ucapkan Terima Kasih.

10118153 — Indrayana Wibawa
Program Studi Teknik Informatika
Fakultas Teknik dan Ilmu Komputer
Universitas Komputer Indonesia

--

--

Indrayana Wibawa
Indrayana Wibawa

Written by Indrayana Wibawa

0 Followers

Mahasiswa Program Studi Teknik Informatika Universitas Komputer Indonesia

No responses yet