Di aplikasi mobile, menggunakan backend database sederhana seperti SQLite dapat berguna untuk berbagai macam kasus penggunaan. Pada artikel ini kita akan memahami tentang Android SQLite API dan helper class untuk pembuatan dan pemeliharaan database. Kita juga akan membahas bagaimana caranya membuat dan menggunakan prepopulated database dan menggunakan SQLite utility library untuk mengimplementasikan database backend di contoh aplikasi restoran.
Ikhtisar
Android memiliki dukungan tertanam untuk database SQLite. Semua fitur SQLite didukung dan menyajikan wrapper API dengan antarmuka yang konsisten. Lihat tautan berikut untuk informasi lebih detail: http://developer.android.com/guide/topics/data/data-storage.html#db
Android SQLite API itu generik dan mempersilahkan pengembang aplikasi untuk mengimplementasikan semua operasi database termasuk pembuatan, penomoran versi, pembaharuan database, dan kustomisasi lainnya. Jika kita ingin menggunakan pre-populated SQLite database, diperlukan konfigurasi tambahan.
Tautan panduan berikut menjelaskan secara detail bagaimana caranya menggunakan Android SQLite API standar: http://developer.android.com/training/basics/data-storage/databases.html
Menggunakan Android SQLite API secara langsung kemungkinan akan menghasilkan banyak boilerplate code. Ada beberapa Android utility library untuk membantu mempermudah proses ini dan meraka juga menyajikan fitur-fitur tambaha untuk penggunaan database SQLite yang lebih mudah dan efisien di aplikasi Android.
SQLiteAssetHelper adalah salah satu library tersebut yang populer di kalangan komunitas pengembang aplikasi Android berdasarkan keterlibatan pengembang aplikasi dan penggunaannya. Lihat tautan berikut ini untuk referensi lengkapnya: https://github.com/jgilfelt/android-sqlite-asset-helper
Contoh Aplikasi Bisnis Restoran – Little Chef
Kita akan menggunakan contoh aplikasi restoran (Little Chef) untuk mendiskusikan penggunaan database SQLite dan library SQLiteAssetHelper.
Aplikasi ini membuat pengguna dapat menelusur berbagai macam kategori menu dan pilihan.
Gambar 1: Contoh Aplikasi Restoran – Little Chef
Aplikasi restoran ini dapat digunakan baik oleh chef maupun pengguna biasa untuk melihat berbagai macam kategori menu dan barang. Contoh aplikasi ini menggunakan gerakan mengusap untuk berganti kategori dan jika memilih salah satu menu akan ditampilkan detailnya.
Sebuah database SQLite dapat digunakan untuk menyimpan semua kategori menu dan detail menu. Di versi kedepan aplikasi ini, kita dapat memperlebar dukungan database-nya untuk data lain seperti data penjualan, program loyalitas, kustomisasi pengguna, dan lain-lain.
Menggunakan Database yang Sudah Ada
Tergantung kebutuhan aplikasinya, kita mungkin harus prepopulasikan aplikasinya dengan satu set data awal. Pada contoh aplikasi restoran ini, satu set kategori menu dan detail menu standar telah di prepopulasikan.
Android API (contoh SQLiteOpenHelper) dapat digunakan untuk mempopulasikan sebuah set data awal sebagai bagian dari pembuatan dan inisialisasi database. Namun, ini mungkin tidak selalu optimal, terutama jika set datanya berukuran besar. Dan juga, beberapa panggilan SQLiteOpenHelper tidak disarankan untuk digunakan pada thread utama. Pengguna mungkin akan merasakan inisialisasi yang lama dan UI yang lambat ketika aplikasi digunakan tergantung kapabilitas perangkat. Cara lain adalah dengan memprepopulasikan database dan memaketkannya sebagai bagian dari aset aplikasi.
Untuk contoh aplikasi restoran, kita membuat database offline SQLite menggunakan API pemrograman python untuk SQLite. Terdapat aplikasi GUI juga untuk mengedit atau menambah data secara manual ke database SQLite. Sebagaimana yang direkomendasikan di dokumentasi Android SQLite API, kita menambahkan kolom “_id” untuk mengindentifikasi tiap baris secara unik. Ini akan berguna ketika mengimplementasikan penyedia konten dan abtraksi adaptor.
Mengakses database SQLite dari folder aset aplikasi dengan Android SQLite API memerlukan kita untuk mengkopi file database dari folder aset ke folder database aplikasi. Mendukung pembaharuan dan penomoran versi database membuat ini menjadi lebih kompleks.
Untuk contoh aplikasi resotran ini, kita menggunakan library SQLiteAssetHelper untuk mengakses prepopulated database yang mana dipaketkan sebagai bagian dari aset aplikasi. Lihat dokumen README dari library SQLiteAssetHelper untuk detail instruksi penggunaan https://github.com/jgilfelt/android-sqlite-asset-helper
Kita membuat folder “databases” dalam “assets” dan mengkopikan ke file “restaurant.sqlite” ke folder “databases”. Lihat potongan kode berikut untuk detail implementasinya:
package com.example.restaurant; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; /** * Database handler for restaurant app. */ public class RestaurantDatabase extends SQLiteAssetHelper { private static final String TAG = SQLiteAssetHelper.class.getSimpleName(); private static final String DATABASE_NAME = "restaurant.sqlite"; private static final int DATABASE_VERSION = 1; public interface TABLES { String MENU = "menu"; String USER = "user"; String CUSTOMER = "customer"; } public interface MenuColumns { String CATEGORY = "category"; String NAME = "name"; String DESCRIPTION = "description"; String NUTRITION = "nutrition"; String PRICE = "price"; String IMAGENAME = "imagename"; } public RestaurantDatabase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } public Cursor getMenuItems() { SQLiteDatabase db = getReadableDatabase(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.setTables(TABLES.MENU); Cursor c = qb.query(db, null, null, null, null, null, null); c.moveToFirst(); return c; } }
Potongan Kode 1: Menggunakan Prepopulated Database
Mengakses Menu dari Database Restoran
Pada awal penjalanan aplikasi, SQLiteAssetHelper akan secara otomatis mengkopi dan memprepopulasikan database restoran dari folder aset ke lokasi database yang sesuai. Panggilan susulan akan menggunakan kembali instance database kecuali jika ada permintaan pembaharuan. Potongan kode sebelumnya menampilkan metode getMenuItems yang mana memberikan kursor untuk semua menu dalam database.
Potongan kode berikut menampilkan pembuatan instance database dan pemrosesan menu dari kursor.
mDb = new RestaurantDatabase(this); mMenuItems = new ArrayList<MenuItem>(); Set<String> categories = new HashSet<String>(); Cursor c = mDb.getMenuItems(); while (c.moveToNext()) { String category = c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.CATEGORY)); categories.add(category); MenuItem menuItem = new MenuItem(); menuItem.setCategory(category); menuItem.setName(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.NAME))); menuItem.setDescription(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.DESCRIPTION))); menuItem.setNutrition(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.NUTRITION))); menuItem.setPrice(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.PRICE))); menuItem.setImageName(c.getString(c.getColumnIndexOrThrow(RestaurantDatabase.MenuColumns.IMAGENAME))); mMenuItems.add(menuItem); } c.close(); mCategoryList = new ArrayList<String>(categories);
Potongan Kode 2: Mengakses Mene dari Database
Menangani akses database di thread utama itu tidak direkomendasikan. Kita dapat menggunakan SQLiteAssetHelper untuk menambah abstraksi tambahan contohnya sepertinya antaramuka penyedia konten Android.
Tergantung pada kebutuhan aplikasi dan kasus penggunaan, kita dapat menambah lebih banyak fungsionalitas ke aplikasi contoh resotran seperti dukungan untuk pembaharuan database, penomoran versi, dan bahkan dukungan server backend. Untuk kasus implementasi database backend, kita dapat menggunakan database SQLite lokal dari aplikasi sebagai cache sementara dan untuk menyediakan kapabilitas offline.
Ringkasan
Artikel ini mendiskusikan penggunaan database SQLite di aplikasi Android. Android SQLite API dan helper class telah didiskusikan. Kita menggunakan contoh aplikasi restoran untuk mendemonstrasikan bagaimana caranya menggunakan prepopulated database menggunakan library SQLiteAssetHelper.
* Artikel ini adalah hasil kerja sama dengan Intel Developer Zone. Artikel asli bisa dilihat di link ini.