Selasa, 03 Desember 2019

SQLite

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.

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