Tutorial Membuat Aplikasi Menggunakan SQLite Pada Android Studio

 

Assalamuala'ikum

Hallo sahabat blogger, ketemu lagi di blog NR Informatika dimana banyak artikel untuk pembelajaran pemrograman Java Netbean, pemrograman PHP, dan pemrograman Android Studio. Ohh ya apa kabar, bagaimana kabar nya nih? saya harap sehat-sehat ya.... Pada artikel sebelumnya saya sudah membagi pengetahuan tentang WebView pada Android Studio, dimana kita sudah tutorial membuat aplikasi Web sebagai bagian dari aplikasi klien dengan menggunakan WebView.

Nah pada kesempatan kali ini saya akan membagikan pengetahuan penggunaan SQLite pada Android Studio. Apa sahabat blogger tahu mengenai SQLite? Yuk kita baca teori nya dibawah!


Teori Singkat SQLite

SQLite merupakan sebuah sistem manajemen basisdata relasional yang bersifat ACID-compliant dan memiliki ukuran pustaka kode yang relatif kecil, ditulis dalam bahasa C. SQLite merupakan proyek yang bersifat public domain yang dikerjakan oleh D. Richard Hipp.

Inti SQLite bukanlah sebuah sistem yang mandiri yang berkomunikasi dengan sebuah program, melainkan sebagai integral dari sebuah program secara keseluruhan, karena itu tidak seperti pada paradigma client-server pada umumnya. Sehingga protokol komunikasi utama yang digunakan adalah melalui pemanggilan API secara langsung melalui bahasa pemrograman. Mekanisme seperti ini tentu membawa keuntungan karena dapat mereduksi overhead, latency times, dan secara keseluruhan lebih sederhana. Seluruh elemen basis data disimpan sebagai sebuah file. Kesederhanaan dari sisi design tersebut bisa diraih dengan cara mengunci keseluruhan file basis data pada saat sebuah transaksi dimulai.

Menggunakan database adalah cara yang tepat untuk menyimpan data terstruktur atau data berulang, seperti informasi kontak. Halaman ini berasumsi bahwa anda sudah familier dengan database SQL secara umum dan akan membantu memulai database SQLite di Android. API yang nanti diperlukan untuk menggunakan database di Android tersedia dalam paket android.database.sqlite .


Fitur-fitur SQLite

Pustaka SQLite mengimplementasikan hampir seluruh elemen-elemen standar yang berlaku pada SQL-93, termasuk transaksi yang bersifat atomic, konsistensi basisdata, isolasi, dan durabilitas (ACID), trigger, dan queri-queri yang kompleks. Tidak ada pengecekan tipe sehingga data bisa dientrikan dalam bentuk string untuk sebuah kolom bertipe data integer. Beberapa kalangan melihat hal ini sebagai sebuah inovasi yang menambah nilai guna dari sebuah basisdata, utamanya ketika digunakan dalam bahasa pemrograman berbasis script (PHP, Perl), sementara kalangan lain melihat hal tersebut sebagai kekurangan.

Beberapa proses ataupun thread dapat berjalan secara bersamaan dan mengakses basisdata yang sama tanpa mengalami masalah. Hal ini disebabkan karena akses baca data dilakukan secara paralel. Sementara itu akses data tulis data hanya bisa dilakukan jika ada proses tulis lain yang sedang dilakukan. Jika tidak, proses tulis tersebut akan gagal dan mengembalikan kode kesalahan atau bisa juga secara otomatis akan mencobanya kembali sampai sejumlah nilai waktu yang ditentukan habis. Hanya saja ketika sebuah tabel temporer dibuat, mekanisme penguncian pada proses multithread akan menyebabkan masalah. Update yang terkini versi 3.3.4 dikatakan telah memperbaiki masalah ini.


Membuat Database Menggunakan SQL Helper

Harus terlebih dahulu menerapkan metode yang akan membuat serta mengelola database dan tabel. Ada beberapa pernyataan umum untuk membuat dan menghapus tabel. Contoh, berikut ini contoh script untuk menentukan tabel dan nama kolom untuk satu tabel yang merespresentasikan feed RSS :

private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + FeedEntry.TABLE_NAME + " (" +
FeedEntry._ID + " INTEGER PRIMARY KEY," +
FeedEntry.COLUMN_NAME_TITLE + " TEXT," +
FeedEntry.COLUMN_NAME_SUBTITLE + " TEXT)";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;

Sama seperti file yang disimpan dipenyimpanan internal perangkat, Android menyimpan databases dalam folder aplikasi pribadi. Data anda akan selalu aman karena secara default area ini tidak dapat diakses oleh aplikasi lain atau oleh pengguna lain.

Class SQLiteOpenHelper berisikan kumpulan API yang berguna untuk mengelola database anda. Saat class digunakan untuk memperoleh referensi ke database, sistem hanya akan melakukan operasi pembuatan dan update database, yang mungkin memerlukan banyak waktu hanya ketika diperlukan, bukan pada saat aplikasi dimulai ya. Yang perlu dilakukan hanyalah memanggil getWritableDatabase() atau getReadableDatabase().

NOTE : "Karena operasi dapat berjalan lama, pastikan memanggil getWritableDatabase() atau getReadableDatabase() di thread latar belakang. Lihat menggunakan thread di Android untuk informasi selengkapnya".

Untuk menggunakan SQLiteOpenHelper, buat subclass yang mengganti metode callback onCreate() dan onUpgrade(). Anda mungkin perlu menerapkan metode onDowngrade() atau onOpen(), tetapi keduanya tidak diperlukan, misalnya penerapan SQLiteOpenHelper yang menggunakan beberapa perintah yang ditampilkan diatas seperti berikut :

public class FeedReaderDbHelper extends SQLiteOpenHelper {
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "FeedReader.db";
public FeedReaderDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// This database is only a cache for online data, so its upgrade policy is
// to simply to discard the data and start over
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
}

Untuk mengakses database, buat instance subclass SQLiteOpenHelper :

FeedReaderDbHelper dbHelper = new FeedReaderDbHelper(getContext());

Nah langsung saja yuk ke praktik tutorialnya, kali ini kita akan membuat aplikasi to do list dengan menggunakan SQLite sebagai penyimpananya. Yuk ikuti langkah -langkah berikut :

Tutorial Membuat Apikasi TODO Menggunakan SQLite Pada Android Studio
  1.  Buka aplikasi Android Studio IDE, lalu pilih project baru "Create New Project".

  2. Pilih "Empty Activity", lalu "Next".

  3. Pada "Configure Your Project" sesuaikan saja seperti keterangan, jika sudah pilih "Finish".
    Keterangan :

    Name TodolistSQLie

    Package Name →  bisa default saja atau bisa diubah, disini saya menggunakan url blog saya lalu diikuti nama project TodolistSQLie.

    Save Location → Sesuaikan tempat penyimpanan yang anda inginkan.

    Language → Java (karena artikel tutorial ini menggunakan bahasa pemrograman java).

    Minimum SDK →  Level API 16 → "Finish"

  4.  Setelah itu akan muncul tamplan project Android Studio IDE seperti ini:

  5. Selanjutnya buka file activity_main.xml, sebelum masuk ke code kita ubah layout terlebih dahulu menjadil RelativeLayout. Caranya klik kanan "ConstraintLayout" →"Convert view...", lalu pilih RelativeLayout. Ikuti langkah seperti pada gambar dibawah ini :



  6. Setelah diubah layout-nya, lalu masukan script nya seperti berikut :

  7. Kemudian kita akan menampilkan list kegiatan yang akan dilakukan dan disampingnya diberikan tombol hapus, dengan membuat sebuah file Layout dengan nama row.xml. Untuk menambahkan file caranya klik kanan folder "layout"→"New"→"Layout Resource File", lalu beri nama "row". Ikuti langkah berikut :


  8. Lalu ketikan kode program untuk mengisi file row.xml seperti berikut:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="20dp"
    android:id="@+id/row"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f5f5dc">

    <TextView
    android:id="@+id/task_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Example"
    android:textSize="20sp"
    android:textColor="@color/black"
    android:layout_alignParentStart="true"
    android:layout_alignParentLeft="true"/>

    <Button
    android:id="@+id/btnDelete"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="HAPUS"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:onClick="deleteTask"/>

    </RelativeLayout>


  9. Selanjutnya kita membuat folder menu pada res, caranya klik kanan pada folder res→ New→ Directory, lalu beri nama directory nya dengan "menu", seperti pada gambar dibawah ini :


  10. Setelah folder dibuat, lalu buat lah sebuah file layout baru pada folder menu dengan nama layout menu.xml, caranya ikuti langkah dibawah ini :


    Tambahkan script pada file menu.xml seperti berikut :

  11. Kemudian kita buat sebuah class SQLiteOpenHelper dengan nama file DbHelper.java. Ikuti lah langkah dibawah ini :



  12. Setelah buat file, ubahlah script nya seperti dibawah ini :
    package ryeyen08.blogspot.com.todolistsqlite;

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

    public class DbHelper extends SQLiteOpenHelper {
    private static final String DB_NAME="EDMTDev";
    private static final int DB_VER = 1;
    public static final String DB_TABLE="Task";
    public static final String DB_COLUMN = "TaskName";
    public DbHelper(Context context) {
    super(context, DB_NAME, null, DB_VER);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
    String query = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);",
    DB_TABLE,DB_COLUMN);
    db.execSQL(query);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String query = String.format("DELETE TABLE IF EXISTS %s",DB_TABLE);
    db.execSQL(query);
    onCreate(db);
    }
    public void insertNewTask(String task){
    SQLiteDatabase db= this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(DB_COLUMN,task);
    db.insertWithOnConflict(DB_TABLE,null,values,SQLiteDatabase.CONFLICT_REPLACE);
    db.close();
    }

    public void deleteTask(String task){
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(DB_TABLE,DB_COLUMN + " = ?",new String[]{task});
    db.close();
    }

    public ArrayList<String> getTaskList(){ ArrayList<String> taskList = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(DB_TABLE,new String[]{
    DB_COLUMN},null,null,null,null,null);
    while(cursor.moveToNext()){
    int index = cursor.getColumnIndex(DB_COLUMN);
    taskList.add(cursor.getString(index));
    }
    cursor.close();
    db.close();
    return taskList;
    }
    }

  13. Lalu buka dan ubah file MainActivity.java dengan script berikut ini :
    package ryeyen08.blogspot.com.todolistsqlite;

    import androidx.appcompat.app.AlertDialog;
    import androidx.appcompat.app.AppCompatActivity;
    import android.content.DialogInterface;
    import android.graphics.PorterDuff;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.TextView;

    import java.util.ArrayList;

    public class MainActivity extends AppCompatActivity {
    DbHelper dbHelper;
    ArrayAdapter<String> mAdapter;
    ListView lstTask;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    dbHelper = new DbHelper(this);
    lstTask = (ListView)findViewById(R.id.lstTask);
    loadTaskList();
    }

    private void loadTaskList() {
    ArrayList<String> taskList = dbHelper.getTaskList();
    if(mAdapter==null){
    mAdapter = new ArrayAdapter<String>(this,R.layout.row,R.id.task_title,taskList);
    lstTask.setAdapter(mAdapter);
    } else{ mAdapter.clear();
    mAdapter.addAll(taskList);
    mAdapter.notifyDataSetChanged();
    }
    }
    @Override public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu,menu);
    //Change menu icon color
    Drawable icon = menu.getItem(0).getIcon();
    icon.mutate();
    icon.setColorFilter(getResources().getColor(android.R.color.white), PorterDuff.Mode.SRC_IN);
    return super.onCreateOptionsMenu(menu);
    }
    @Override public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
    case R.id.action_add_task: final EditText taskEditText = new EditText(this);
    AlertDialog dialog = new AlertDialog.Builder(this)
    .setTitle("Tambah Tugas")
    .setMessage("Apa yang kamu ingin lakukan hari ini ?")
    .setView(taskEditText)
    .setPositiveButton("Tambah", new DialogInterface.OnClickListener() {
    @Override public void onClick(DialogInterface dialog, int which) {
    String task = String.valueOf(taskEditText.getText());
    dbHelper.insertNewTask(task);
    loadTaskList();
    }
    }
    )
    .setNegativeButton("Batal",null)
    .create();
    dialog.show();
    return true;
    }
    return super.onOptionsItemSelected(item);
    }
    public void deleteTask(View view)
    {
    View parent = (View)view.getParent();
    TextView taskTextView = (TextView)parent.findViewById(R.id.task_title);
    Log.e("String", (String) taskTextView.getText());
    AlertDialog dialog = new AlertDialog.Builder(this)
    .setMessage("Apakah Anda Yakin Ingin Menghapus Data Ini?")
    .setPositiveButton("Ya", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    String task = String.valueOf(taskTextView.getText());
    dbHelper.deleteTask(task);
    loadTaskList();
    }
    }
    )
    .setNegativeButton("Batal",null)
    .create();
    dialog.show();
    }
    }

  14. Ubahlah nama aplikasi sesuai keinginan, dengan cara buka dan ubah file strings.xml yang terdapat dalam folder res/values/.. script nya seperti berikut :

  15. Yang terakhir jika sudah selesai semua pilih Run App untuk menjalankan aplikasi pada emulator yang sudah tersedia atau bisa langsung ke device android yang anda punya. Maka akan tampil deh, silahkan klik menu tambah tugas yang berada pada pojok kanan atas. Tampilannya seperti pada video dibawah ini :

Nah gimana sahabat, sudah bisa? Jika ada kendala bisa langsung komentar dibawah ya kita diskusikan bersama. Semoga ilmunya bermanfaat, terus ikuti artikel-artikel lainnya di blog NR Informatika.

Terimakasih kunjungannya

0 comments:

Posting Komentar