Membuat database di Android Studio dengan Room Database memang lebih mudah dan lebih terstruktur. Di dalam pembelajaran ini kita akan belajar tentang Room Database dan penerapan nya untuk menambah data, menampilkan data, mengubah data, dan menghapus data.
Mari kita buat dari awal sobat! Pertama-tama siapkan Laptop dan buka Android Studio nya, dan jangan lupa siapkan cemilan pavorit nya juga ya.
Buat projek baru di Android Studio

Buat struktur file seperti berikut

Buat Layouting
Buatlah tampilan pada activity_main.xml seperti pada kode dibawah 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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:id="@+id/btn_tambah"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tambah"
android:layout_alignParentBottom="true"
android:layout_margin="10dp" />
</RelativeLayout>
Kemudian buat tampilan pada activity_tambah.xml seperti pada kode dibawah:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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=".TambahActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp">
<EditText
android:id="@+id/full_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:hint="Nama Lengkap"
android:autofillHints="" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp">
<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="Alamat Email"
android:autofillHints="" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/btn_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Simpan" />
</LinearLayout>
</ScrollView>
Buat juga tampilan untuk row data row_user.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:padding="14dp"
android:orientation="vertical">
<TextView
android:id="@+id/full_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="Nama Lengkap" />
<TextView
android:id="@+id/email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email"/>
</LinearLayout>
Entitas
Buatlah sebuah kode entitas pada kode User.java seperti dibawah:
package com.trisnasejati.room.database.entitas;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity
public class User {
@PrimaryKey
public int uid;
@ColumnInfo(name = "name")
public String fullName;
public String email;
}
DAO
Buatlah kode DAO pada UserDao.java seperti dibawah:
package com.trisnasejati.room.database.dao;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import com.trisnasejati.room.database.entitas.User;
import java.util.List;
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAll();
@Query("INSERT INTO user (name,email) VALUES(:name, :email)")
void insertAll(String name, String email);
@Query("UPDATE user SET name=:name, email=:email WHERE uid=:uid")
void update(int uid, String name, String email);
@Query("SELECT * FROM user WHERE uid=:uid")
User get(int uid);
@Delete
void delete(User user);
}
Database Mode
Buatlah sebuat database room model pada AppDatabase.java dibawah ini:
package com.trisnasejati.room.database;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.MutableLiveData;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.sqlite.db.SupportSQLiteDatabase;
import com.trisnasejati.room.database.dao.UserDao;
import com.trisnasejati.room.database.entitas.User;
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
private static AppDatabase sInstance;
private final MutableLiveData<Boolean> mIsDatabaseCreated = new MutableLiveData<>();
@VisibleForTesting
public static final String DATABASE_NAME = "my_database";
public abstract UserDao userDao();
private void setDatabaseCreated(){
mIsDatabaseCreated.postValue(true);
}
private void updateDatabaseCreated(final Context context) {
if (context.getDatabasePath(DATABASE_NAME).exists()) {
setDatabaseCreated();
}
}
public static AppDatabase buildDatabase(final Context context) {
return Room.databaseBuilder(context, AppDatabase.class, DATABASE_NAME)
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
AppDatabase database = AppDatabase.getInstance(context);
database.setDatabaseCreated();
}
}).allowMainThreadQueries().fallbackToDestructiveMigration().build();
}
public static AppDatabase getInstance(final Context context){
if (sInstance == null){
synchronized (AppDatabase.class) {
if (sInstance == null){
sInstance = buildDatabase(context);
sInstance.updateDatabaseCreated(context.getApplicationContext());
}
}
}
return sInstance;
}
}
Adapter
Buatlah sebuah adapter untuk menampilkan list ke RecyclerView seperti pada kode UserAdapter.java dibawah:
package com.trisnasejati.room.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.trisnasejati.room.R;
import com.trisnasejati.room.database.entitas.User;
import java.util.List;
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewAdapter> {
private List<User> list;
private Context context;
private Dialog dialog;
public interface Dialog {
void onClick(int position);
}
public void setDialog(Dialog dialog) {
this.dialog = dialog;
}
public UserAdapter(Context context, List<User> list){
this.context = context;
this.list = list;
}
@NonNull
@Override
public ViewAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_user, parent, false);
return new ViewAdapter(view);
}
@Override
public void onBindViewHolder(@NonNull ViewAdapter holder, int position) {
holder.fullName.setText(list.get(position).fullName);
holder.email.setText(list.get(position).email);
}
@Override
public int getItemCount() {
return list.size();
}
class ViewAdapter extends RecyclerView.ViewHolder{
TextView fullName, email;
public ViewAdapter(@NonNull View itemView) {
super(itemView);
fullName = itemView.findViewById(R.id.full_name);
email = itemView.findViewById(R.id.email);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (dialog!=null){
dialog.onClick(getLayoutPosition());
}
}
});
}
}
}
Activity
Berikan kode pada MainActivity.java seperti pada kode dibawah:
package com.trisnasejati.room;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.trisnasejati.room.adapter.UserAdapter;
import com.trisnasejati.room.database.AppDatabase;
import com.trisnasejati.room.database.entitas.User;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private Button btnTambah;
private AppDatabase database;
private UserAdapter userAdapter;
private List<User> list = new ArrayList<>();
private AlertDialog.Builder dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
btnTambah = findViewById(R.id.btn_tambah);
database = AppDatabase.getInstance(getApplicationContext());
list.clear();
list.addAll(database.userDao().getAll());
userAdapter = new UserAdapter(getApplicationContext(), list);
userAdapter.setDialog(new UserAdapter.Dialog() {
@Override
public void onClick(int position) {
final CharSequence[] dialogItem = {"Edit", "Hapus"};
dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setItems(dialogItem, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
switch (i){
case 0:
Intent intent = new Intent(MainActivity.this, TambahActivity.class);
intent.putExtra("uid", list.get(position).uid);
startActivity(intent);
break;
case 1:
User user = list.get(position);
database.userDao().delete(user);
onStart();
break;
}
}
});
dialog.show();
}
});
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext(), RecyclerView.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(userAdapter);
btnTambah.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this, TambahActivity.class));
}
});
}
@Override
protected void onStart() {
super.onStart();
list.clear();
list.addAll(database.userDao().getAll());
userAdapter.notifyDataSetChanged();
}
}
Kemudian jangan lupa tambahkan kode ke TambahActivity.java dibawah ini:
package com.trisnasejati.room;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.trisnasejati.room.database.AppDatabase;
import com.trisnasejati.room.database.entitas.User;
public class TambahActivity extends AppCompatActivity {
private EditText editName, editEmail;
private Button btnSave;
private AppDatabase database;
private int uid = 0;
private boolean isEdit = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tambah);
editName = findViewById(R.id.full_name);
editEmail = findViewById(R.id.email);
btnSave = findViewById(R.id.btn_save);
database = AppDatabase.getInstance(getApplicationContext());
Intent intent = getIntent();
uid = intent.getIntExtra("uid", 0);
if (uid>0){
isEdit = true;
User user = database.userDao().get(uid);
editEmail.setText(user.email);
editName.setText(user.fullName);
}else{
isEdit = false;
}
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isEdit){
database.userDao().update(uid, editName.getText().toString(), editEmail.getText().toString());
}else{
database.userDao().insertAll(editName.getText().toString(), editEmail.getText().toString());
}
finish();
}
});
}
}
Untuk lebih lengkapnya agar mudah memahami silahkan tonton video dibawah atau kunjungi kanal Youtube Kami!