Android Database SQLite

Versi 1.0

1. Mengenal SQLite

Penyimpanan database internal pada aplikasi Android bisa dilakukan dengan SQLite. SQLite merupakan database management system yang populer untuk penyimpanan lokal / client pada aplikasi perangkat lunak. SQLite merupakan database engine yang paling banyak digunakan di dunia untuk keperluan seperti browser, sistem operasi, dan aplikasi mobile. SQLite pada aplikasi Android menyimpan data internal aplikasi itu sendiri, aplikasi lain tidak dapat menggunakannya.

2. Membuat Database SQLite

Database SQLite pada aplikasi Android dibuat dengan class anak (subclass) dari class SQLiteOpenHelper. Class tersebut menjadi class data access untuk database SQLite. Object dari class tersebut dapat digunakan oleh semua class lain yang mengakses database. Untuk membuatnya, kita buat class yang bernama Database yang menjadi subclass dari SQLiteOpenHelper sebagai berikut.
import java.util.ArrayList;

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

public class Database extends SQLiteOpenHelper {

	private final static int DATABASE_VERSION = 1;
	private final static String DATABASE_NAME = "DIANDEV";
	private SQLiteDatabase DB;

	public Database(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		createTable(db);
	}

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

	public void openWritable(){
		this.DB = getWritableDatabase();
	}

	public void openReadable(){
		this.DB = getReadableDatabase();
	}

	public void close(){
		this.DB.close();
	}

	public void createTable(SQLiteDatabase db){
                String sql = "CREATE TABLE IF NOT EXISTS person " +
				"(id INTEGER PRIMARY KEY, name TEXT)";
		db.execSQL(sql);
	}

	public long insertData(int id, String name) {
		ContentValues values = new ContentValues();
		values.put("id", id);
		values.put("name", name);
		return DB.insert("person", null, values);
	}

	public int updateData(int id, String name) {
		ContentValues values = new ContentValues();
		values.put("name", name);
		return DB.update("person", values, "id = " + id, null);
	}

	public int deleteData(int id) {
		return DB.delete("person", "id = " + id, null);
	}

	public ArrayList getPersonList() {
		Cursor cursor = DB.rawQuery(
				"SELECT * from person", null);
		ArrayList list = new ArrayList();
		cursor.moveToFirst();
		for (int i = 0; i < cursor.getCount(); i++) {
			list.add(cursor.getString(cursor.getColumnIndex("name")));
			cursor.moveToNext();
		}
		return list;
	}

}
Constuctor dari class tersebut mendefinisikan nama dan versi database. Nama database kita beri nama “DIANDEV” dan versi database adalah 1. Nama digunakan untuk memberikan penamaan database. Versi digunakan untuk memberikan nomor versi database yang digunakan dalam perubahan struktur database, misalnya penambahan tabel atau kolom pada database. Fungsi onCreate() dipanggil ketika ketika object dari class ini pertama kali dibuat dan akan memanggil fungsi createTable() yang berisi perintah untuk membuat tabel-tabel pada database. Fungsi onUpgrade() dipanggil ketika terjadi penambahan versi database yang berguna ketika kita ingin mengubah struktur database (penambahan atau perubahan tabel dan kolom).
Untuk mengakses database, maka kita perlu membuat tampilan (UI) dan class Activity pada project ini. Kita buat tampilan dengan file activity_main.xml  seperti berikut ini.
<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Android Database"
        android:layout_gravity="center_horizontal"
        android:textSize="24sp" />

    <ListView
        android:id="@+id/lv_person"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
Kita buat class MainActivity.java seperti berikut ini.
import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

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

		Database data = new Database(this);
		data.openWritable();
		// mengambil data dari database
		ArrayList listData = data.getPersonList();
		// periksa apakah ada data, jika tidak ada akan dilakukan inisiasi data
		if(listData.size() < 1){

			// inisiasi data ke dalam database
			data.insertData(1,"Aji");
			data.insertData(2,"Tyas");
			data.insertData(3,"Cukli");
			data.insertData(4,"Paijo");
			data.insertData(5,"Bowo");
			data.insertData(6,"Mumuw");
			data.insertData(7,"Fatin");
			data.insertData(8,"Gibun");
			data.insertData(9,"Boim");
			data.insertData(10,"Limpat");

			listData = data.getPersonList();
		}
		data.close();

		ArrayAdapter adapter = new ArrayAdapter(this,
				android.R.layout.simple_list_item_1, listData);

		ListView listView = (ListView) findViewById(R.id.lv_person);
		listView.setAdapter(adapter);
	}
}
Pada class tersebut kita membuat object dari class Database yang bernama data. Pada class tersebut kita periksa apakah database telah terisi data, jika belum kita inisiasi data ke dalam database. Data dari database kita ambil dan ditampilkan pada ListView.
Kita jalankan project maka data-data dari database akan ditampilkan pada ListView seperti berikut ini.
1
Kita dapat merubah data yang ada di dalam database. Kita akan merubah data yang bernama “Aji” dengan id = 1 yang akan kita rubah namanya menjadi “Aji Setyo“. Untuk merubahnya, tambahkan code berikut ini ke dalam class MainActivity.java sebelum code data.close(). Jalankan project, maka “Aji” akan berubah menjadi “Aji Setyo” seperti berikut ini.
// perubahan data
data.updateData(1, "Aji Setyo");
listData = data.getPersonList();
2
Kita juga dapat menghapus data dari database. Kita akan merubah data yang bernama “Aji Setyo” dengan id = 1. Untuk menghapusnya, tambahkan code berikut ini sebelum code data.close(). Jalankan project, maka “Aji Setyo” tidak akan ada lagi pada list karena data tersebut telah dihapus dari database.
// penghapusan data
data.deleteData(1);
listData = data.getPersonList();
3

3. Download Project

Anda dapat mendownload file project dari tutorial ini di sini.

Jika ada yang belum jelas, silakan tanyakan pada form komentar, Ciao… 🙂

Shared Preferences

Versi 1.0

1. Mengenal Shared Preferences

Menyimpan data pada aplikasi Android dapat dilakukan dengan beberapa cara, antara lain :

  • Shared Preferences
    Adalah penyimpanan data primitif pada file internal aplikasi dengan pasangan key-value.
  • Internal Storage
    Adalah penyimpanan data privat pada memory internal device.
  • External Storage
    Adalah penyimpanan data yang bersifat publik (dapat diakses siapapun) pada memory external device.
  • SQLite Databases
    Adalah penyimpanan data terstruktur pada database internal aplikasi.
  • Network Connection
    Adalah penyimpanan data pada server dengan perantara jaringan (internet).

Yang akan kita bahas pada artikel ini adalah penyimpanan data dengan Shared Preferences. Penyimpanan dengan metode ini merupakan penyimpanan data yang paling sederhana. Sederhana pada data yang disimpan maupun metode penyimpanannya. Data yang dapat disimpan hanyalah data primitif seperti int, boolean, float, long, dan String. Data disimpan dengan konsep pasangan Key-Value. Key digunakan sebagai id dari data dan Value adalah nilai datanya, misalnya key adalah “nama” dan value adalah nilai dari nama itu misalnya “dian”, sehingga pasangan Key-Valuenya adalah (key,value) = (“nama”,”dian”).

2. Implementasi Shared Preferences

Shared Preferences bisa dimanfaatkan untuk penyimpanan data yang sederhana. Saya akan mencontohkan penggunaan Shared Preferences sebagai seperti berikut ini.
Pertama kita buat xml layout pada file activity_main.xml seperti berikut ini.

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Masukkan Nama : " />

    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/bt_save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Simpan" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Nama Tersimpan : " />

    <TextView
        android:id="@+id/tv_saved_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

</LinearLayout>

Kemudian kita buat class MainActivity menjadi seperti berikut ini.

import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private SharedPreferences pref;
	private final String KEY_NAME = "key_name";

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

		pref = getSharedPreferences("mypreferences", MODE_PRIVATE);

		showSavedName();

		final EditText etName = (EditText) findViewById(R.id.et_name);

		Button bSave = (Button) findViewById(R.id.bt_save);
		bSave.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				String name = etName.getText().toString();
				if(name.equals("")){
					Toast.makeText(MainActivity.this, 
                                              "Nama tidak boleh kosong",
                                              Toast.LENGTH_SHORT).show();
				}else{
					saveName(name);
					showSavedName();
				}
			}
		});
	}

	private void showSavedName(){
		String savedName = getSavedName();

		TextView tvSavedName = (TextView) findViewById(R.id.tv_saved_name);
		tvSavedName.setText(savedName);
	}

	private String getSavedName(){
		return pref.getString(KEY_NAME, "-"); 
	}

	private void saveName(String name){
		Editor editor = pref.edit();
		editor.putString(KEY_NAME, name);
		editor.commit();
	}
}

Jalankan project maka aplikasi akan berjalan seperti berikut ini.

1

2

3

Jika aplikasi kita tutup, kemudian kita jalankan lagi, maka pada Nama Tersimpan akan langsung muncul nama Jono. Karena nama terakhir yang disimpan adalah Jono. Maka terbukti bahwa data nama telah berhasil disimpan pada penyimpanan Shared Preferences.

4

Shared Preferences dapat dimanfaatkan untuk membuat berbagai penyimpanan sederhana seperti :

  • Session Account (username dan password) dari aplikasi
  • Data Pengaturan (Setting: bahasa, tema, volume, dsb) dari aplikasi
  • Dan Lain-Lain

3. Download Project

Untuk lebih memudahkan dan memahami tutorial ini, silakan download project-nya di sini dan jalankan di IDE anda.