Anda di halaman 1dari 15

MODUL PRAKTIKUM

SQLite

Materi SQLite

Indikator Pembelajaran Menjelaskan mengenai penerapan sqlite


sebagai fundamental pemrograman mobile
berbasis android.

Materi Ajar Praktikum CRUD menggunakan SQLite

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 1


Praktikum SQLite

A. Tujuan
Agar Anda dapat lebih memahami topik SQLite beserta CRUD nya
B. Membuat Proyek Baru
Nama Project MyStudents
Target & Minimum Target SDK Phone and Tablet, API level
21
Tipe Activity Empty Activity
Activity Name MainActivity
Use AndroidX artifacts True
Language Java

C. Kode
Langkah pertama adalah buat package baru dengan nama model,
kemudian buat class di Java dengan nama Student.java seperti code
berikut:
Student.java
public class Student implements Serializable {
private int id;
private String name, nim;

Setelah itu, kita akan buat setter getter. Bisa kita lakukan dengan
Alt+Insert atau Klik Kanan Generate→ Getter and Setter pada editor
didalam model data CoffeeDrink.java.

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 2


Langkah 1 Langkah 2

Kemudian pilih semua variabel yang sudah dibuat.

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 3


Maka Student.java akan menjadi seperti ini
public class Student implements Serializable {
private int id;
private String name, nim;

public int getId() {


return id;
}

public void setId(int id) {


this.id = id;
}

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}

public String getNim() {


return nim;
}

public void setNim(String nim) {


this.nim = nim;
}
}

Pada class Student diatas kita perlu implement ke Serializable supaya nantinya
saat proses edit data, object student tersebut dapat dikirimkan melalui intent ke
activity UpdateActivity

asdfghjk

Selanjutnya buat package baru kembali dengan nama db dan buat class baru
dengan nama DbHelper.java, berikut codenya:

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 4


DbHelper.java

public class DbHelper extends SQLiteOpenHelper {

public static String DATABASE_NAME = "dbsiakad";


private static final int DATABASE_VERSION = 1;
private static final String TABLE_STD = "students";
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_NIM = "nim";

private static final String CREATE_TABLE_STUDENTS = "CREATE


TABLE "
+ TABLE_STD + "(" + KEY_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + "
TEXT, " + KEY_NIM + " TEXT );";

public DbHelper(Context context) {


super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_STUDENTS);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {

Code diatas merupakan Class bantuan untuk pengolahan database DDL(Data


Definition Language) dan DML(Data Manipulation Language), dimana untuk
proses DDL terdapat pada method onCreate dan onUpgrade, sedangkan proses
DML pada method lainnya.

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 5


Tahapan selanjutnya adalah kita akan buat proses insert data ke database, disini
akan digunakan MainActivity untuk implementasinya. Pertama kita siapkan
terlebih dahulu layout di activity_main.xml dengan code dibawah ini:

activity_main.xml

cc
<Button
android:id="@+id/btn_list"
style="@style/Base.Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Daftar Students" />

</LinearLayout>

Kemudian pada MainActivity.java kita lengkapi code nya seperti dibawah:

MainActivity.java

public class MainActivity extends AppCompatActivity {

DbHelper dbHelper;
private EditText etName, etNim;
private Button btnSave, btnList;

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

dbHelper = new DbHelper(this);

etName = findViewById(R.id.edt_name);
etNim = findViewById(R.id.edt_nim);
btnSave = findViewById(R.id.btn_submit);
btnList = findViewById(R.id.btn_list);

btnSave.setOnClickListener(v -> {
if (etNim.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this, "Error: Nim
harus diisi!", Toast.LENGTH_SHORT).show();
} else if (etName.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this, "Error: Nama
harus diisi!", Toast.LENGTH_SHORT).show();
} else {
dbHelper.addUserDetail(etNim.getText().toString(),
etName.getText().toString());
etName.setText("");

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 6


etNim.setText("");
Toast.makeText(MainActivity.this, "Simpan
berhasil!", Toast.LENGTH_SHORT).show();
}
});

btnList.setOnClickListener(v -> {
Intent intent = new Intent(MainActivity.this,
ListStudentsActivity.class);
startActivity(intent);
});
}
}

Pada code diatas sebelum proses insert ke database kita lakukan terlebih dahulu
validasi untuk pengisian EditText nim dan nama, dimana tidak boleh kosong.
Selanjutnya, jika validasi terpenuhi maka proses insert akan dilakukan dengan
menggunakan object dari class DBHelper pada method addUserDetail( ).

Sampai proses ini kita sudah bisa melakukan proses input data ke database,
silahkan bisa anda ujicoba run aplikasi tersebut

Proses insert data

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 7


Proses selanjutnya adalah menampilkan data menggunakan RecyclerView, disini
kita perlu membuat class adapter dengan nama StudentAdapter.java yang bisa
kita letakan di package adapter dan juga activity baru dengan nama
ListStudentActivity.java

Untuk melengkapi adapter tersebut, kita buat terlebih dahulu layout untuk
menampilkan data Student di file item_student.xml dan
activity_list_student.xml dengan code berikut:

item_student.xml

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:orientation="vertical">

<androidx.cardview.widget.CardView
android:id="@+id/cv_item_student"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="4dp"
app:cardElevation="4dp"
app:cardMaxElevation="4dp"
app:cardUseCompatPadding="true">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">

<TextView
android:id="@+id/tv_item_nim"
android:layout_width="match_parent"

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 8


android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:gravity="start"
android:text="20.10.8899"
android:textSize="16sp"
android:textStyle="bold" />

<TextView
android:id="@+id/tv_item_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:text="Arif Dwi Laksito"
android:textSize="14sp" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<Button
android:id="@+id/btn_edit"
android:layout_width="wrap_content"
android:layout_height="38dp"
android:layout_weight="1"
android:text="Edit" />

<Button
android:id="@+id/btn_delete"
android:layout_width="wrap_content"
android:layout_height="38dp"
android:layout_marginStart="8dp"
android:layout_weight="1"
android:text="Delete" />
</LinearLayout>

</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>

activity_list_student.xml

<?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=".ListStudentsActivity">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 9


Berikutnya file StudentAdapter kita lengkapi seperti code dibawah ini:

public class StudentAdapter extends


RecyclerView.Adapter<StudentAdapter.StudentViewHolder> {

private ArrayList<Student> listStudents = new ArrayList<>();


private Activity activity;
private DbHelper dbHelper;

public StudentAdapter(Activity activity) {


this.activity = activity;
dbHelper = new DbHelper(activity);
}

public ArrayList<Student> getListStudents() {


return listStudents;
}

public void setListStudents(ArrayList<Student> listNotes) {


if (listNotes.size() > 0) {
this.listStudents.clear();
}
this.listStudents.addAll(listNotes);
notifyDataSetChanged();
}

@NonNull
@Override
public StudentViewHolder onCreateViewHolder(@NonNull ViewGroup
parent, int viewType) {
View view =
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_st
udent, parent, false);
return new StudentViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull StudentViewHolder
holder, int position) {
holder.tvNim.setText(listStudents.get(position).getNim());

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 10


holder.tvName.setText(listStudents.get(position).getName());
holder.btnEdit.setOnClickListener((View v) -> {
Intent intent = new Intent(activity,
UpdateActivity.class);
intent.putExtra("user", (Serializable)
listStudents.get(position));
activity.startActivity(intent);
});

holder.btnDelete.setOnClickListener((View v) -> {
AlertDialog.Builder builder = new
AlertDialog.Builder(activity);

builder.setTitle("Konfirmasi hapus");
builder.setMessage("Apakah yakin akan dihapus?");

builder.setPositiveButton("YA", (dialog, which) -> {

dbHelper.deleteUser(listStudents.get(position).getId());
Toast.makeText(activity, "Hapus berhasil!",
Toast.LENGTH_SHORT).show();
Intent myIntent = new Intent(activity,
ListStudentsActivity.class);
activity.startActivity(myIntent);
activity.finish();
});

builder.setNegativeButton("TIDAK", (dialog, which) ->


dialog.dismiss());

AlertDialog alert = builder.create();


alert.show();

});
}

@Override
public int getItemCount() {
return listStudents.size();
}

public class StudentViewHolder extends RecyclerView.ViewHolder


{

final TextView tvNim, tvName;


final Button btnEdit, btnDelete;

public StudentViewHolder(@NonNull View itemView) {


super(itemView);
tvNim = itemView.findViewById(R.id.tv_item_nim);
tvName = itemView.findViewById(R.id.tv_item_name);
btnEdit = itemView.findViewById(R.id.btn_edit);
btnDelete = itemView.findViewById(R.id.btn_delete);
}
}
}

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 11


Pada code diatas masih menampilkan notice error pada baris ke-36 dikarenakan
kita belum membuat file UpdateActivity untuk proses edit data. Kita bisa
comment terlebih dahulu baris ke-36, 37 dan 38 supaya tidak menyebabkan error,
selanjutnya nanti bisa kita uncomment kembali untuk melanjutkan proses edit
data.

Berikutnya pada file ListStudentActivity.java, kita tambahkan code dibawah ini


untuk menampilkan data-data yang sudah ada di database ke dalam RecyclerView

ListStudentActivity.java

public class ListStudentsActivity extends AppCompatActivity {

private RecyclerView recyclerView;


private StudentAdapter adapter;
private ArrayList<Student> studentsArrayList;
private DbHelper dbHelper;

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

recyclerView = (RecyclerView) findViewById(R.id.rview);


adapter = new StudentAdapter(this);

dbHelper = new DbHelper(this);


studentsArrayList = dbHelper.getAllUsers();
adapter.setListStudents(studentsArrayList);

RecyclerView.LayoutManager layoutManager = new


LinearLayoutManager(ListStudentsActivity.this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
}

@Override
protected void onResume() {
super.onResume();
studentsArrayList = dbHelper.getAllUsers();
adapter.setListStudents(studentsArrayList);
adapter.notifyDataSetChanged();
}
}

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 12


Kita bisa melakukan ujicoba dengan menjalankan/run project tersebut, jika sesuai
maka aplikasi tersebut akan menampilkan list data student dan bisa kita lakukan
penghapusan dengan klik tombol delete pada list di masing-masing student.
Sebelum data tersebut dihapus, aplikasi akan memunculkan alertDialog dimana
untuk memastikan user benar-benar akan menghapus data tersebut. Proses ini
dilakukan pada file AdapterStudent baris ke-41 sampai dengan baris ke-60.

Menampilkan data students

Sedangkan proses edit data belum bisa dilakukan, saat kita tekan tombol edit
maka tidak akan terjadi action apapun. Untuk melengkai fitur edit, kita buat
activity baru dengan  nama UpdateActivity.java. Berikut ini code untuk
UpdateActivity dan layout nya yaitu activity_update.xml

UpdateActivity

public class UpdateActivity extends AppCompatActivity {

private DbHelper dbHelper;


private EditText etName, etNim;
private Button btnSave;
private Student student;

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

dbHelper = new DbHelper(this);

etName = findViewById(R.id.edt_name);
etNim = findViewById(R.id.edt_nim);
btnSave = findViewById(R.id.btn_submit);

Intent intent = getIntent();


student = (Student) intent.getSerializableExtra("user");

etName.setText(student.getName());
etNim.setText(student.getNim());

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 13


btnSave.setOnClickListener((View v) -> {
dbHelper.updateUser(student.getId(),
etNim.getText().toString(), etName.getText().toString());
Toast.makeText(UpdateActivity.this, "Updated
berhasil!", Toast.LENGTH_SHORT).show();
finish();
});

}
}

activity_update.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="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp">
<EditText
android:id="@+id/edt_nim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="NIM"
android:inputType="textCapSentences"
android:maxLines="1" />
</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="16dp">
<EditText
android:id="@+id/edt_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nama lengkap"
android:inputType="textCapSentences"
android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/btn_submit"
style="@style/Base.Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Update" />

</LinearLayout>

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 14


Setelah code dari kedua file diatas lengkap, kita lakukan uncomment pada file
StudentAdapter pada baris ke-36, 37 dan 38. Kemudian bisa kita jalankan aplikasi
tersebut dan bisa kita ujicoba untuk melakukan edit pada data student.

Tugas
Tugas
1. Mengerjakan tugas dengan mempraktikan apa yang telah didemokan
di kelas terkait SQLite, dikumpulkan kedalam folder google drive yang
Bernama “tugas 2”dengan ketentuan
a. Format Nama “Kelas-Absen-Nama-Tugas 2 SQLite”
b. Berbentuk Rar/Zip yang berisikan
● Rar/Zip Project
● APK Project

https://drive.google.com/drive/folders/1fSN8jmCbo5j9yps87t79EqTXO
ewoGCGq?usp=sharing

Modul Rekayasa Perangkat Lunak, S.Pd – SMKN 1 Cimahi 15

Anda mungkin juga menyukai