Lorem ipsum dolor sit amet, consectetur adipiscing elit. Test link

Mengenal apa itu SQLite pada Android Studio


Membuat Apps todo list menggunakan SQLite

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.

Tidak seperti pada paradigma client-server umumnya, Inti SQLite bukanlah sebuah sistem yang mandiri yang berkomunikasi dengan sebuah program, melainkan sebagai bagian integral dari sebuah program secara keseluruhan. Sehingga protokol komunikasi utama yang digunakan adalah melalui pemanggilan API secara langsung melalui bahasa pemrograman. Mekanisme seperti ini tentunya membawa keuntungan karena dapat mereduksi overhead, latency times, dan secara keseluruhan lebih sederhana. Seluruh elemen basisdata (definisi data, tabel, indeks, dan data) disimpan sebagai sebuah file. Kesederhanaan dari sisi disain 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 Anda memulai database SQLite di Android. API yang nanti Anda perlukan 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 (dalam bahasa inggris lebih sering disebut ACID), trigger, dan kueri-kueri yang kompleks. Tidak ada pengecekan tipe sehingga data bisa dientrikan dalam bentuk string untuk sebuah kolom bertipe 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 sebuah kekurangan.

Beberapa proses ataupun thread dapat berjalan secara bersamaan dan mengakses basisdata yang sama tanpa mengalami masalah. Hal ini disebabkan karena akes baca data dilakukan secara paralel. Sementara itu akses tulis data hanya bisa dilakukan jika tidak 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


Kita harus menerapkan metode yang akan membuat serta mengelola database dan tabel. Berikut adalah beberapa pernyataan umum untuk membuat dan menghapus tabel, Contohnya, berikut menentukan tabel dan nama kolom untuk satu tabel yang merepresentasikan 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 di penyimpanan internal perangkat, Android menyimpan database Anda dalam folder pribadi aplikasi. Data Anda akan selalu aman karena secara default area ini tidak dapat diakses oleh aplikasi lain atau oleh pengguna.

Kelas SQLiteOpenHelper berisi kumpulan API yang berguna untuk mengelola database Anda. Saat kelas ini 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. Yang perlu Anda lakukan hanyalah memanggil getWritableDatabase() atau getReadableDatabase().
 
Catatan: Karena operasi dapat berjalan lama, pastikan Anda 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 juga perlu menerapkan metode onDowngrade() atau onOpen(), tetapi keduanya tidak diperlukan, Misalnya, berikut adalah penerapan SQLiteOpenHelper yang menggunakan beberapa perintah yang ditampilkan di atas:
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 Anda:

FeedReaderDbHelper dbHelper = new FeedReaderDbHelper(getContext());

Praktikum


Kali ini kita akan membuat aplikasi to do list sederhana menggunakan SQLite sebagai penyimpanannya. Buka android studio lalu buat project baru dengan nama TodolistSQLite (sesuaikan). layout utama pada Layout aplikasi ini menggunakan RelativeLayout untuk menampilkan todo list menggunakan ListView.

1. Pertama jalankan aplikasi IDE Android Studio, caranya :

  • Pilih Start → Android Studio
  • Pilih → Start a new Android Studio Project
  • Pilih → Empty Activity → Next 


  • Name → TodolistSQLite
  • Package Name → ubah menjadi nama blog kalian masing-masing, di sini saya  menggunakan url blog saya com.naskahkode lalu di ikuti nama project TodolistSQLite
  • Save Location → C:\Users\DELL\AndroidStudioProjects\NamaMhs\ TodolistSQLite
  • Language → Java Minimum API Level → API 14 → Klik Finish

2. Ketikan kode-kode berikut pada activity_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"
android:background="#f5f5dc"
tools:context=".MainActivity">
<ListView
android:id="@+id/lstTask"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>

3. Buat sebuah file Layout dengan nama row.xml file

 ini nantinya digunakan untuk menampilkan list kegiatan yang akan dilakukan dan disampingnya akan kita berikan tombol hapus

4. Lalu ketikan kode program berikut ini untuk isi file row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f5f5dc">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/task_title"
android:text="Example"
android:textSize="20sp"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnDelete"
android:text="HAPUS"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick="deleteTask"/>
</RelativeLayout>

5. Setelah itu kita akan membuat Folder Menu

caranya Klik kanan pada folder res > New > Directory lalu Beri nama menu


6. Setelah itu buat file menu.xml

dengan cara Klik kanan pada folder Menu > New >  File Beri nama menu.xml 
 

lalu ketikan kode program berikut ini
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_add_task"
android:icon="@android:drawable/ic_menu_add"
android:title="Tambah Tugas "
app:showAsAction="always" />
</menu>

7. Selanjutnya kita akan membuat class SQLiteOpenHelper dengan nama file DbHelper.java

    SqliteOpenHelper adalah sebuah subclass , yang digunakan untuk menentukan nama database dan versi database yang sedang dipakai. Kita bisa menerapkan method di clas ini seperti : OnCreate (SqliteDatabase) ,OnUpgrade (SqliteDatabase int int ) dan OnOpen(SqliteDatabase). Buat sebuah Class baru dengan nama DbHelper.
 

 
Kemudian implementasikan kode-kode berikut pada DbHelper.java
package com.naskahkode.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;
}


}

8. Selanjutnya Pada MainActivty.java masukan kode-kode berikut ini.

package com.naskahkode.todolistsqlite;

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 androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
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("Cancel",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());
String task = String.valueOf(taskTextView.getText());
dbHelper.deleteTask(task);
loadTaskList();
}

}

9. Ubah nama aplikasi sesuai keinginan. 

dengan cara merubah file string.xml yang ada dalam folder ..res/values.. Seperti berikut ini
<resources>
<string name="app_name">Catatan with SQLite</string>
</resources>

10. Run Program

 Jika sudah selesai semua, running aplikasi pada emulator atau langsung ke device android yang kamu punya. Jika sudah tampil silahkan klik menu tambah tugas yang berada di pojok kanan atas. Maka tampilannya seperti video di bawah ini.
 

11. Menambahkan fitur alertDialog saat menghapus task

 ubah kode deleteTask pada mainActivity.java menjadi seperti dibawah ini
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());
String task = String.valueOf(taskTextView.getText());
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("Hapus Tugas ( "+ task+" )")
.setMessage("Yakin hapus tugas ini ?" )
.setPositiveButton("hapus", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dbHelper.deleteTask(task);
loadTaskList();
}
})
.setNegativeButton("Cancel",null)
.create();
dialog.show();
}

12. Run Program

 Jika sudah selesai semua, running aplikasi pada emulator atau langsung ke device android yang kamu punya. Jika sudah tampil silahkan klik menu tambah tugas yang berada di pojok kanan atas. Maka tampilannya seperti video di bawah ini.
 


Sumber :
https://id.wikipedia.org/wiki/SQLite
https://developer.android.com/training/data-storage/sqlite?hl=id#java

5 comments

  1. Test
    1. Test reply
    2. Test reply 2
    3. J
  2. tes