Android: Menyimpan data di Database SQL

Android menyediakan tiga cara untuk menyimpan data di device. Jika hanya untuk menyimpan sedikit data (beberapa variabel), gunakan shared preferences.  Jika data cukup kompleks dan sering memerlukan pencarian (akses random), gunakan database seperti yang akan dibahas di posting ini. Jika ukuran datanya besar,  tidak perlu pencarian, dapat disimpan di SD card untuk kemudian dibaca komputer, atau memerlukan format yang yang sangat spesifik, gunakan file.

Implementasi database di Android menggunakan SQLite.  SQLite adalah embedded database (hanya menggunakan sekitar 250KB memori) yang menyediakan fasilitas relational DBMS  termasuk SQL.  Referensi lengkap SQLite  dapat dilihat di http://www.sqlite.org/   SQLite tidak hanya digunakan di Android.

Setiap aplikasi memiliki instance database tersendiri, dan berbeda dengan shared preference, tidak disediakan fasilitas agar aplikasi dapat membaca database aplikasi lain. Untuk menggunakan SQLite, sangat dianjurkan menggunakan class helper untuk membuka dan menutup database,  menginisiasi tabel  dst. Helper juga digunakan saat melakukan upgrade struktur database jika suatu saat aplikasi diupdate.  Class helper ini diturunkan dari class SQLiteOpenHelper.

Untuk latihan kita akan membuat aplikasi sederhana yang menyimpan data mahasiswa berupa nama dan nomor telepon.  Pertama kita buat class helper terlebih dulu. Buatlah project Android, tambahkan ke dalam project tersebut satu class. Pastikan superclass kelas ini adalah SQLiteOpenHelper.  Beri nama class ini OpenHelper.

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

/**
 *   helper untuk database
 */


public class OpenHelper extends SQLiteOpenHelper
{
    //kalau ini berubah, increment versi database
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "dbMhs.db";
    public static final String TABLE_CREATE =
            "CREATE TABLE MAHASISWA (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAMA TEXT, TELEPON TEXT)";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        //create database
        db.execSQL(TABLE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //jika app diupgrade (diinstall yang baru) maka database akan dicreate ulang (data hilang)
        //jika tidak tidak ingin hilang, bisa diproses disini
        db.execSQL("DROP TABLE IF EXITS MAHASISWA");
    }
}

Selanjutnya kita akan membuat class yang melakukan manipulasi terhadap data (insert, ambil data), beri nama DbMahasiswa. Code DbMahasiwa adalah sebagai berikut:

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

public class DbMahasiswa {
    public static class Mahasiswa {
        public String nama;
        public String telepon;
    }


    private SQLiteDatabase db;
    private final OpenHelper dbHelper;

    public DbMahasiswa(Context c) {
        dbHelper =  new OpenHelper(c);
    }

    public void open() {
        db = dbHelper.getWritableDatabase();
    }

    public void close() {
        db.close();
    }

    public long insertMahasiswa(String nama, String noTelp) {
        ContentValues newValues = new ContentValues();
        newValues.put("NAMA", nama);
        newValues.put("TELEPON", noTelp);
        return db.insert("MAHASISWA", null, newValues);
    }

   //ambil data mahasiswa berdasarkan nama 
   public Mahasiswa getMahasiswa(String nama) {
        Cursor cur = null;
        Mahasiswa M = new Mahasiswa();

        //kolom yang diambil
        String[] cols = new String [] {"ID", "NAMA", "TELEPON"};
        //parameter, akan mengganti ? pada NAMA=?
        String[] param  = {nama};

        cur = db.query("MAHASISWA",cols,"NAMA=?",param,null,null,null);

        if (cur.getCount()>0) {  //ada data? ambil
            cur.moveToFirst();
            M.nama = cur.getString(1);
            M.telepon = cur.getString(2);
        }

        return M;
    }
}

Setelah kita membuat class helper dan class dbMahasiswa, sekarang kita akan memanfaatkan dua kelas tersebut. Kembali ke activity utama yaitu class MainActivity. Tambahkan kode dibagian onCreate sebagai berikut.

protected void onCreate(Bundle savedInstanceState) {

        .... code oncreate

        //insert mahasiswa
        DbMahasiswa db = new DbMahasiswa(getApplicationContext());
        db.open();
        db.insertMahasiswa("budi","123456");

        //ambil data mahasiswa
        DbMahasiswa.Mahasiswa m = db.getMahasiswa("budi");
        AlertDialog ad = new AlertDialog.Builder(this).create();
        ad.setMessage("nama="+m.nama+"  telp:"+m.telepon);
        ad.show();

    }

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.