1 Feb 2018

Tutorial Android : CRUD Sqlite Database

Database

Database akan digunakan untuk menyimpan data yang terstruktur dan berulang. Berbeda dengan variable tentunya. Database ini sangat berguna untuk memudahkan kita untuk menyimpan serta menggunakan kembali data. Dan kali ini kita akan membahasnya dengan menggunakan Sqlite Database.

Contoh Project Sqlite CRUD masrahman28.blogspot.com

Mungkin itu saja ya penjelasannya, kita langsung membuat project dengan menggunakan sqlite. Buat sebuah project dengan nama Sqlite
Membuat Project Sqlite masrahman28.blogspot.com
Next saja sampai kita diminta memilih template dari jenis Activity, kita pilih yang Empty Activity ya, kita buat dengan Nama InsertActivity dan layoutnya activity_insert.xml

Jika sudah kita sedikit jelaskan dulu konsep project yang akan kita buat adalah membuat CRUD untuk data peserta yang isinya nama dan alamat saja simpel kok seperti gambar di atas. Pertama-tama kita buat dulu ya class modelnya kita buat satu buat class dengan nama PesertaModel.java
Ingat ya biasakan di ketik aja coding-coding dari tutorialnnya biar kita terbiasa dan akan memudahkan kita dalam mengerjakan project selanjutnya
package com.example.sqlite;

public class PesertaModel {
    int id;
    String nama;
    String alamat;

    public PesertaModel(int id, String nama, String alamat) {
        this.id = id;
        this.nama = nama;
        this.alamat = alamat;
    }

    public int getId() {
        return id;
    }

    public String getNama() {
        return nama;
    }

    public String getAlamat() {
        return alamat;
    }
}

Untuk dapat menggunakan database sqlite kita akan membuat sebuah class Helper yang telah disediakan yang nantinya akan kita kembangkan dengan beberapa penambahan fungsi CRUD. Sehingga proses-proses yang berkaitan dengan database akan di proses pada class tersebut. Kita buat satu buah class lagi dengan nama DatabaseHelper.java yang nanti akan extends ke SQLiteOpenHelper dimana kita harus memiliki dua buah method super class yaitu onCreate() dan onUpgrade() sisanya kita buat untuk pengolahan data

package com.example.sqlite;

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

import java.util.ArrayList;
import java.util.List;

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final int VERSION = 1;
    private static final String DBNAME = "db_peserta";
    private static final String TABLENAME = "peserta";

    private static String colID = "id";
    private static String colNama = "nama";
    private static String colAlamat = "alamat";

    public DatabaseHelper(Context context) {
        super(context, DBNAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + TABLENAME + " (" +
                colID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + colNama + " TEXT," +
                colAlamat + " TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+ TABLENAME);
        onCreate(db);
    }

    public void insertData(String nama, String alamat){
        String insertData = "INSERT INTO "+ TABLENAME + " ("+ colNama +","+colAlamat+") VALUES ('"+nama +"', '"+alamat+"')";
        this.getWritableDatabase().execSQL(insertData);
    }

    public void updateData(int id, String nama, String alamat){
        String updateData = "UPDATE "+TABLENAME+ " SET "+ colNama + "= '"+nama +"', "+colAlamat + "= '"+alamat + "' WHERE "+colID +" ="+id;
        this.getWritableDatabase().execSQL(updateData);
    }

    public void deleteData(int id){
        String deleteData = "DELETE FROM "+TABLENAME +" WHERE id="+id;
        this.getWritableDatabase().execSQL(deleteData);
    }

    public PesertaModel getData(int id){
        PesertaModel model = null;
        String selectData = "SELECT * FROM "+TABLENAME + " WHERE id="+String.valueOf(id);
        Cursor data = this.getWritableDatabase().rawQuery(selectData, null);
        if(data.moveToFirst()){
            model = new PesertaModel(Integer.parseInt(data.getString(data.getColumnIndex(colID))),
                    data.getString(data.getColumnIndex(colNama)), data.getString(data.getColumnIndex(colAlamat)));
        }
        return model;
    }

    public List<PesertaModel> getAll(){
        List<PesertaModel> model = new ArrayList<>();
        String selectData = "SELECT * FROM "+TABLENAME;
        Cursor data = this.getWritableDatabase().rawQuery(selectData, null);
        if(data.moveToFirst()){
            do{
                model.add(new PesertaModel(Integer.parseInt(data.getString(data.getColumnIndex(colID))),
                        data.getString(data.getColumnIndex(colNama)), data.getString(data.getColumnIndex(colAlamat))));
            }while (data.moveToNext());
        }
        return model;
    }
}

Jika sudah maka kita kembali ke activity_insert.xml dimana kita akan menambahkan form untuk penambahan data peserta dengan dua buah EditText dan dua buah Button seperti di bawah

<?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="com.example.sqlite.InsertActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:gravity="center">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Tambah Data Peserta"
            android:textAlignment="center"
            android:textSize="18sp"
            android:textStyle="bold" />
        <EditText
            android:layout_marginTop="10dp"
            android:id="@+id/etNama"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Nama"
            android:gravity="center"/>
        <EditText
            android:id="@+id/etAlamat"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Alamat"
            android:gravity="center"/>
        <Button
            android:layout_marginTop="10dp"
            android:id="@+id/btnSimpan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Simpan"
            android:paddingRight="30dp"
            android:paddingLeft="30dp"
            android:background="@android:color/holo_blue_dark"
            android:textColor="@android:color/white"
            />
    </LinearLayout>
    <Button
        android:layout_marginTop="10dp"
        android:id="@+id/btnViewdata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Lihat Data"
        android:paddingRight="30dp"
        android:paddingLeft="30dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:background="@android:color/holo_orange_dark"
        android:textColor="@android:color/white"
        />
</RelativeLayout>

Biarkan dulu okey untuk proses insert nya karena klo dari depan ngoding nya nanti bolak balik haha, sekarang kita akan membuat terlebih dahulu satu buah activity dengan nama UpdateActivity yang akan kita gunakan ketika merubah data peserta. Caranya klik kanan di package name dari project kita dan pilih yang Empty Activity
Menambah Activity masrahman28.blogspot.com
jika sudah membuat UpdateActivity, kita buat activity_update.xml dan samakan seperti activity_insert.xml hanya saja tanpa button untuk view data

<?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="com.example.sqlite.UpdateActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:gravity="center">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Ubah Data Peserta"
            android:textAlignment="center"
            android:textSize="18sp"
            android:textStyle="bold" />
        <EditText
            android:layout_marginTop="10dp"
            android:id="@+id/etNama"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Nama"
            android:gravity="center"/>
        <EditText
            android:id="@+id/etAlamat"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Alamat"
            android:gravity="center"/>
        <Button
            android:layout_marginTop="10dp"
            android:id="@+id/btnSimpan"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Simpan"
            android:paddingRight="30dp"
            android:paddingLeft="30dp"
            android:background="@android:color/holo_blue_dark"
            android:textColor="@android:color/white"
            />
    </LinearLayout>
</RelativeLayout>

Selanjutnya kita kita buka UpdateActivity.java dimana kita akan mulai memanfaatkan class Helper yang telah kita buat tadi dengan nama DatabaseHelper pertama-tama activity ini akan menampilkan data yang akan di update terlebih dahulu. Lalu jika kita simpan proses simpan maka data akan ter Update

package com.example.sqlite;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class UpdateActivity extends AppCompatActivity {
    EditText etNama, etAlamat;
    Button btnSimpan;
    PesertaModel model;
    DatabaseHelper dbhelp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update);
        etNama = (EditText)findViewById(R.id.etNama);
        etAlamat = (EditText)findViewById(R.id.etAlamat);
        btnSimpan = (Button)findViewById(R.id.btnSimpan);
        dbhelp = new DatabaseHelper(this);
        Bundle bundle = getIntent().getExtras();
        if(bundle!=null){
            model = dbhelp.getData(bundle.getInt("ID"));
            etNama.setText(model.getNama());
            etAlamat.setText(model.getAlamat());
        }
        btnSimpan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dbhelp.updateData(model.getId(), etNama.getText().toString(), etAlamat.getText().toString());
                finish();
            }
        });
    }
}

Beres nih proses Update, tp proses update ini gakan terpanggil jika kita tidah memperlihatkan data existing nya ya kan? nah kita buat lagi satu buah Activity yang akan kita gunakan untuk menampilkan list-list data yang ada pada database kita. Kuy kita buat lagi satu buah activity dengan nama ListActivity caranya ada ya di atas.

Pada ListActivity ini kita akan menggunakan RecyclerView, ada yang bingung dengan RecyclerView? coba ikutin dulu Tutorial RecyclerView ini. Nah mari kita lanjutkan dengan membuat satu buah file layout dengan nama list_row.xml dengan isi seperti di bawah ini

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="vertical">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="5dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:layout_marginLeft="5dp">
        <TextView
            android:id="@+id/txtNama"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:text="NAMA SAYA NAMA"
            android:textStyle="bold"/>
        <TextView
            android:id="@+id/txtAlamat"
            android:text="ALAMAT SAYA"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="4"
        android:orientation="horizontal"
        android:padding="2dp">
        <ImageButton
            android:id="@+id/btnUpdate"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:src="@drawable/ic_pencil"
            android:tint="@android:color/white"
            android:scaleType="fitCenter"
            android:padding="2dp"
            android:background="@android:color/holo_orange_dark"
            />
        <ImageButton
            android:id="@+id/btnDelete"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:src="@drawable/ic_delete"
            android:tint="@android:color/white"
            android:scaleType="fitCenter"
            android:padding="2dp"
            android:background="@android:color/holo_red_dark"
            />
    </LinearLayout>
</LinearLayout>
    <View
        android:layout_marginTop="5dp"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:color/black"/>
</LinearLayout>

Kita lanjutkan dan kembali ke activity_list.xml dan tambahkan widget RecyclerView, loh kok ga ada suggestion untuk RecyclerView atau cannot resolve? nah jika terjadi seperti itu kamu harus menambahkan dependencies support:design kalau bingung buka Tutorial RecyclerView 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"
    tools:context="com.example.sqlite.ListActivity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recylerList"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

Setelah itu kita buat dulu nih class Adapter karena kita akan menggunakan RecyclerView untuk mengantisipasi kan namanya juga takut-takut data yang kita simpan itu banyak. Kita buat dengan nama ListAdapter (saya akan sisipkan pada ListActivity, tp jika ingin membuat file baru untuk menyimpan class ini silahkan karena sama saja)

Nah karena saya menyisipkan langsung class ListAdapter pada ListActivity maka isi coding lengkap dari ListActivity.java menjadi

package com.example.sqlite;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class ListActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    RecyclerView.Adapter adapter;
    List<PesertaModel> list = new ArrayList<>();
    DatabaseHelper dbhelp;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        dbhelp = new DatabaseHelper(this);
        recyclerView = (RecyclerView)findViewById(R.id.recylerList);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
    }

    @Override
    protected void onResume() {
        super.onResume();
        list = dbhelp.getAll();
        adapter = new ListAdapter(this, list);
        recyclerView.setAdapter(adapter);
    }

    public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListHolder>{
        Context context;
        List<PesertaModel> list;

        public ListAdapter(Context context, List<PesertaModel> list) {
            this.context = context;
            this.list = list;
        }

        @Override
        public ListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_row, parent, false);
            return new ListHolder(v);
        }

        @Override
        public void onBindViewHolder(ListHolder holder, int position) {
            final PesertaModel model = list.get(position);
            holder.nama.setText(model.getNama());
            holder.alamat.setText(model.getAlamat());
            holder.update.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(ListActivity.this, UpdateActivity.class);
                    intent.putExtra("ID", model.getId());
                    startActivity(intent);
                }
            });
            holder.delete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final AlertDialog.Builder builder = new AlertDialog.Builder(context);
                    builder.setMessage("Yakin Menghapus Data?");
                    builder.setPositiveButton("Ya", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    dbhelp.deleteData(model.getId());
                                    dialogInterface.dismiss();
                                    notifyDataSetChanged();
                                }
                    });
                    builder.setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int i) {
                                    dialogInterface.dismiss();
                                }
                    });
                    builder.show();
                }
            });
        }

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

        public class ListHolder extends RecyclerView.ViewHolder{
            TextView nama, alamat;
            ImageButton update, delete;
            public ListHolder(View itemView) {
                super(itemView);
                nama = (TextView)itemView.findViewById(R.id.txtNama);
                alamat = (TextView)itemView.findViewById(R.id.txtAlamat);
                update = (ImageButton)itemView.findViewById(R.id.btnUpdate);
                delete = (ImageButton)itemView.findViewById(R.id.btnDelete);
            }
        }
    }
}

Nah proses menampilkan list data, update, serta delete telah selesai. sekarang baru kita balik lagi ke Activity yang kita buat pertama kali nih dan udah itu beres deh Project CRUD menggnakan Sqlite yang telah kita buat.
Langsung aja kita buka InsertActivity.java dan kita tambahkan fungsi insertnya ya

package com.example.sqlite;

import android.content.Intent;
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.Toast;

public class InsertActivity extends AppCompatActivity {
    EditText etNama, etAlamat;
    Button btnSimpan, btnView;
    DatabaseHelper dbhelp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_insert);
        etNama = (EditText)findViewById(R.id.etNama);
        etAlamat = (EditText)findViewById(R.id.etAlamat);
        btnSimpan = (Button)findViewById(R.id.btnSimpan);
        btnView = (Button)findViewById(R.id.btnViewdata);
        btnSimpan.setOnClickListener(listener);
        btnView.setOnClickListener(listener);
        dbhelp = new DatabaseHelper(this);
    }

    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.btnSimpan:
                    dbhelp.insertData(etNama.getText().toString(), etAlamat.getText().toString());
                    Toast.makeText(getApplicationContext(), "Data Tersimpan", Toast.LENGTH_SHORT).show();
                    etNama.getText().clear();
                    etAlamat.getText().clear();
                    break;
                case R.id.btnViewdata:
                    startActivity(new Intent(InsertActivity.this, ListActivity.class));
                    break;
            }
        }
    };
}

Beres nih project CRUD database Sqlite yang kita buat, dan sudah bisa dijalankan. Untuk source code lengkapnya Download disini

4 komentar:

  1. Halo kak, terimakasih artikelnya... ini sangat membantu saya dalam menyelesaikan tugas kuliah saya. oh ya kak, perkenalkan nama saya Nurhamimah dan jangan lupa kunjungi website kampus saya ISB Atma Luhur

    BalasHapus
  2. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  3. Halo kak, terimakasih artikelnya... ini sangat membantu saya dalam menyelesaikan tugas kuliah saya. oh ya kak, perkenalkan nama saya Nurhamimah dan jangan lupa kunjungi website kampus saya ISB Atma Luhur

    BalasHapus