Konsep Dasar Database SQLite pada Android
Banyak opsi media
penyimpanan yang bisa kita pakai untuk menyimpan data ke dalam aplikasi
Android, menggunakan database SQLite adalah salah satu opsi yang paling
serbaguna dan praktis untuk kita implementasikan.
Database SQLite adalah
solusi penyimpanan yang baik jika anda memiliki data terstruktur yang perlu
diakses dan disimpan secara persisten serta sering ditelusuri dan diubah. Anda
juga bisa menggunakan SQLite sebagai media penyimpanan utama untuk data
aplikasi atau pengguna, atau anda juga bisa menggunakannya untuk proses caching
serta menyediakan data yang diambil dari cloud.
Jika anda bisa
menyatakan data berupa baris dan kolom, pertimbangkan untuk memakai database
SQLite. Jika anda menggunakan database SQLite, yang dinyatakan sebagai objek
SQLiteDatabase adalah semua interaksi dengan database adalah melalui instance
dari kelas SQLiteOpenHelper yang akan mengeksekusi permintaan dan pengelolaan
database. Aplikasi anda hanya boleh berinteraksi dengan SQLiteOpenHelper, yang
akan kita bahas bersama-sama dibawah ini.
Ada dua tipe data yang
dikaitkan secara khusus dengan penggunaan database SQLite, yaitu Cursor dan
ContentValues.
Cursor
SQLiteDatabase selalu
menyajikan hasil berupa Cursor dalam format tabel yang menyerupai database SQL.
Anda bisa menganggap data sebagai larik baris dan cursor adalah pointer ke
dalam satu baris data terstruktur. Kelas Cursor menyediakan metode untuk
menggerakan cursor melalui struktur data, dan metode untuk mendapatkan data
dari bidang-bidang setiap baris.
Kelas Cursor memiliki
sejumlah subkelas yang mengimplementasikan cursor untuk tipe data tertentu,
yaitu:
• SQLiteCursor untuk mengekspos hasil query dari
sebuah SQLiteDatabase. SQLiteCursor tidak disinkronkan secara internal,
sehingga kode yang menggunakan SQLiteCursor dari beberapa thread harus
melakukan sinkronisasi sendiri saat menggunakan SQLiteCursor.
• MatrixCursor adalah implementasi cursor
lengkap dan tidak tetap, yang didukung oleh larik objek yang secara otomatis
meluaskan kapasitas internal bila diperlukan.
Beberapa operasi umum yang ada pada cursor
adalah :
• getCount(), mengembalikan jumlah baris dalam
cursor.
• getColumnNames(), mengembalikan larik string
yang berisi nama semua kolom dalam rangkaian hasil dalam urutan pencantumannya
dalam hasil/result.
• getPosition(), mengembalikan posisi cursor
saat ini dalam rangkaian baris.
• Getter tersedia untuk tipe data tertentu,
seperti getString(int column) dan getInt(int column).
• Operasi seperti moveToFirst() dan moveToNext()
akan menggerakan cursor.
• close(), membebaskan semua sumber daya dan
membuat cursor menjadi tidak valid. Ingat, untuk menutup panggilan, guna
membebaskan sumber daya!
Memproses
Cursor
Jika panggilan metode
mengembalikan ulangi pada hasil, ekstrak data, lakukan sesuatu dengan data, dan
terakhir harus menutup cursor untuk membebaskan memori. Jika tidak dilakukan,
maka aplikasi anda bisa saja terhenti saat kehabisan memori.
Cursor dimulai sebelum
baris hasil pertama, sehingga pada pengulangan pertama gerakkan cursor ke hasil
pertama jika ada. Jika cursor kosong, atau baris terakhir sudah diproses, maka
akan keluar dari loop (perulangan). Jangan lupa untuk menutup cursor bila anda
telah selesai menggunakannya. (Ini tidak boleh diulang terlalu sering).
// Perform a query and store the result in a Cursor Cursor cursor = db.rawQuery(...); try { while (cursor.moveToNext()) { // Do something with the data } } finally { cursor.close(); }
Jika menggunakan database SQL, anda bisa
mengimplementasikan kelas SQLiteOpenHelper untuk mengembalikan cursor ke
aktivitas pemanggil atau adapter, atau anda bisa mengonversi data ke format
yang lebih cocok untuk adapter. Manfaat dari yang terakhir itu adalah
pengelolaan cursor (dan penutupannya) ditangani oleh helper terbuka, dan
antarmuka pengguna anda tidak tergantung pada apa yang terjadi di backend.
ContentValues
Serupa dengan cara ekstra menyimpan
data, instance ContentValues menyimpan data sebagai pasangan nilai kunci, dalam
ini kuncinya adalah nama kolom dan nilainya untuk cell. Satu instance
ContentValues menyatakan satu baris tabel.
Metode insert()
untuk database memerlukan nilai untuk mengisi baris yang diteruskan sebagai
instance ContentValues.
ContentValues values = new ContentValues(); // Insert one row. Use a loop to insert multiple rows. values.put(KEY_WORD, "Android"); values.put(KEY_DEFINITION, "Mobile operating system."); db.insert(WORD_LIST_TABLE, null, values);
Mengimplementasikan
Database SQLite
Untuk
mengimplementasikan SQLite, anda perlu melakukan ini :
1. Buat model data.
2.Jadikan
SQLiteOpenHelper sebagai subkelas
• Gunakan konstanta untuk nama tabel dan query pembuatan database.
• Implementasikan onCreate() untuk membuat SQLiteDatabase tabel untuk data anda.
• Implementasikan onUpgrade().
• Implementasikan metode opsional.
• Gunakan konstanta untuk nama tabel dan query pembuatan database.
• Implementasikan onCreate() untuk membuat SQLiteDatabase tabel untuk data anda.
• Implementasikan onUpgrade().
• Implementasikan metode opsional.
3.
Implementasikan metode query(), insert(), delete(), update(), count() dalam SQLiteOpenHelper.
4. Dalam MainActivity
anda, buat instance SQLiteOpenHelper.
5. Panggil metode
SQLiteOpenHelper untuk digunakan bersama database anda.
Objection:
• Bila anda mengimplementasikan metode, selalu
masukan operasi database ke dalam blok try/catch.
• Aplikasi contoh tidak memvalidasi data
pengguna. Bila anda menulis aplikasi untuk dipublikasikan, selalu pastikan data
pengguna sesuai harapan untuk menghindari penyuntikan data buruk atau eksekusi
perintah SQL yang berbahaya ke dalam database Anda.
Pembuatan Model Data
Praktik yang baik
adalah dengan membuat kelas yang menyatakan data Anda dengan getter dan setter.
Untuk database SQLite, instance kelas ini dapat menyatakan satu catatan, dan
untuk database sederhana, satu baris dalam tabel.
public class WordItem { private int mId; private String mWord; private String mDefinition; // Getters and setters and more }
Jadikan
SQLiteOpenHelper sebagai subkelas
Open helper apa pun
yang Anda buat harus meng-extends SQLiteOpenHelper.
public class WordListOpenHelper extends SQLiteOpenHelper { public WordListOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); Log.d(TAG, "Construct WordListOpenHelper"); } }
Tidak ada komentar:
Posting Komentar