12
 www.tobuku.com - 1 - Aplikasi Android dengan Pre-built Database Desember 2011 Tingkat: Oleh : Feri Djuandi Pemula Menengah Mahir  Platform : Android 2.3, Eclipse, SQLite Pembahasan database pada aplikasi Android selama ini mengasumsikan database SQLite belum terbentuk atau tidak disertakan di dalam program sehingga database akan dibuat pada saat aplikasi pertama kali dijalankan. Pada kondisi tersebut database dalam keadaan kosong (tidak mengandung data apapun), kecuali hanya terdiri dari sebuah atau beberapa table yang dibuat bersamaan dengan database tersebut menggunakan perintah CREATE. Bagaimana seandainya programmer hendak mendistribusikan sebuah aplikasi Android yang mengandung database dengan data yang te lah dipersiapkan? Mungkinkah sebuah aplikasi Android menyertakan pre- built database di dalam paket instalasinya? Dengan semakin berkembangnya penggunaan perangkat Android dalam aplikasi bisnis maka ada banyak sekali kebutuhan dari hal ini, misalnya untuk memuat daftar produk dan harga pada aplikasi penjualan, daftar rekanan bengkel dan alamat pada aplikasi klaim asuransi, simulasi kredit pada aplikasi pembiayaan, daftar produk dan premi asuransi pada aplikasi ilustrasi dan penerapan-penerapan lainnya – yang semuanya itu membutuhkan database berisi data yang sudah disiapkan sebelumnya. Artikel ini akan menjelaskan konsep dan teknik dasar pembuatan pre-built database, mengemasnya di dalam aplikasi serta penggunaannya saat aplikasi dijalankan. Semoga uraian ini menjadi topik yang menarik bagi Anda. Langkah pertama tentunya mempersiapkan pre-built database itu sendiri, yang umumnya menggunakan sebuah database management tool yang akan membantu programmer dalam mempersiapkan sebuah database SQLite. Dengan bantuan Google seorang programmer dapat dengan mudah menemukan beberapa database manager untuk SQLite, namun salah satu yang cukup populer adalah SQLite Manager. Program SQLite Manager berbentuk add-on yang diinstal pada program Mozilla Firefox  , oleh karena itu harus dipastikan program browser tersebut t elah terinstal sebelumnya pada komputer Anda. SQLite Manager adalah program yang sangat sederhana dan praktis, namun bisa memenuhi hampir semua keperluan programmer. Ia memiliki menu untuk membuat database, table, index, view dan trigger; serta sebuah kotak untuk menulis dan menjalankan perintah SQL. Sebuah program yang cukup lengkap dan mudah digunakan. Program SQLite Manager dapat dunduh secara gratis pada alamat berikut ini: https://addons.mozilla.org/id/firefox/addon/sqlite-manager/ Pada uraian ini akan digunakan sebuah contoh database yang memuat data produk seperti yang digunakan pada aplikasi penjualan. Anggaplah bahwa Anda sedang mempersiapkan sebuah daftar produk dari sebuah perusahaan, kemudian data ini akan digunakan oleh para pemasar melalui smartphone Android-nya dan aplikasi yang Anda k embangkan.

Aplikasi Android Dengan Pre-Built Database

Embed Size (px)

Citation preview

www.tobuku.com

Aplikasi Android dengan Pre-built DatabaseDesember 2011 Oleh : Feri Djuandi Platform : Android 2.3, Eclipse, SQLiteTingkat: Pemula

Menengah Mahir

Pembahasan database pada aplikasi Android selama ini mengasumsikan database SQLite belum terbentuk atau tidak disertakan di dalam program sehingga database akan dibuat pada saat aplikasi pertama kali dijalankan. Pada kondisi tersebut database dalam keadaan kosong (tidak mengandung data apapun), kecuali hanya terdiri dari sebuah atau beberapa table yang dibuat bersamaan dengan database tersebut menggunakan perintah CREATE. Bagaimana seandainya programmer hendak mendistribusikan sebuah aplikasi Android yang mengandung database dengan data yang telah dipersiapkan? Mungkinkah sebuah aplikasi Android menyertakan prebuilt database di dalam paket instalasinya? Dengan semakin berkembangnya penggunaan perangkat Android dalam aplikasi bisnis maka ada banyak sekali kebutuhan dari hal ini, misalnya untuk memuat daftar produk dan harga pada aplikasi penjualan, daftar rekanan bengkel dan alamat pada aplikasi klaim asuransi, simulasi kredit pada aplikasi pembiayaan, daftar produk dan premi asuransi pada aplikasi ilustrasi dan penerapan-penerapan lainnya yang semuanya itu membutuhkan database berisi data yang sudah disiapkan sebelumnya. Artikel ini akan menjelaskan konsep dan teknik dasar pembuatan pre-built database, mengemasnya di dalam aplikasi serta penggunaannya saat aplikasi dijalankan. Semoga uraian ini menjadi topik yang menarik bagi Anda. Langkah pertama tentunya mempersiapkan pre-built database itu sendiri, yang umumnya menggunakan sebuah database management tool yang akan membantu programmer dalam mempersiapkan sebuah database SQLite. Dengan bantuan Google seorang programmer dapat dengan mudah menemukan beberapa database manager untuk SQLite, namun salah satu yang cukup populer adalah SQLite Manager. Program SQLite Manager berbentuk add-on yang diinstal pada program Mozilla Firefox, oleh karena itu harus dipastikan program browser tersebut telah terinstal sebelumnya pada komputer Anda. SQLite Manager adalah program yang sangat sederhana dan praktis, namun bisa memenuhi hampir semua keperluan programmer. Ia memiliki menu untuk membuat database, table, index, view dan trigger; serta sebuah kotak untuk menulis dan menjalankan perintah SQL. Sebuah program yang cukup lengkap dan mudah digunakan. Program SQLite Manager dapat dunduh secara gratis pada alamat berikut ini: https://addons.mozilla.org/id/firefox/addon/sqlite-manager/ Pada uraian ini akan digunakan sebuah contoh database yang memuat data produk seperti yang digunakan pada aplikasi penjualan. Anggaplah bahwa Anda sedang mempersiapkan sebuah daftar produk dari sebuah perusahaan, kemudian data ini akan digunakan oleh para pemasar melalui smartphone Android-nya dan aplikasi yang Anda kembangkan.

-1-

www.tobuku.com 1. Jalankan SQLite Manager menggunakan program Mozilla Firefox melalui menu Tools SQLite Manager. 2. Jalankan menu Database New Database untuk membuat sebuah database SQLite baru yang bernama productdemo.sqlite. Anda bebas untuk menempatkan file databasenya pada folder manapun di dalam komputer.

3. Pada tab Execute SQL, ketikkan perintah berikut ini untuk membuat sebuah table bernama productlist.CREATE TABLE productlist ( _id INTEGER PRIMARY KEY AUTOINCREMENT, prodcategory TEXT, prodname TEXT, ccy TEXT, unitprice FLOAT );

Jalankan perintah tersebut dengan menekan tombol Run SQL. Pastikan table itu telah terbentuk tanpa pesan kesalahan.

-2-

www.tobuku.com

CATATAN: Berikut ini adalah tipe-tipe data yang didukung oleh SQLite:

-3-

www.tobuku.com

4. Masukkan beberapa baris data ke dalam table tersebut dengan perintah INSERT seperti berikut ini.INSERT INTO productlist INSERT INTO productlist INSERT INTO productlist Holmes','USD',9.95); INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Book','O Little Town','USD',11.5); (prodcategory, prodname, ccy, unitprice) VALUES('Book','A Dixie Christmas','USD',9.95); (prodcategory, prodname, ccy, unitprice) VALUES('Book','The Adventures and the Memoirs of Sherlock (prodcategory, prodname, ccy, unitprice) VALUES('Book','The Hunger Games','USD',23.36);

INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Electronic','Apple iPod touch 32GB','USD',264.99); INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Electronic','Garmin nvi 1490LMT 5-Inch','USD',349.99); INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Computer','Kindle Fire, Full Color 7" Multi-touch Display, Wi-Fi','USD',199.00 ); INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Computer','Apple MacBook Pro MD318LL/A 15.4Inch','USD',1709.88 ); INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Computer','HP TouchPad Wi-Fi 32 GB 9.7','USD',280.99 ); INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Software','Kaspersky Internet Security','USD',79.95); INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Software','Microsoft Office Home & Student 2010','USD',149.99);

Pindah ke tab Browse and Search untuk melihat isi dari table tersebut (pastikan table productlist telah disorot).

-4-

www.tobuku.com

Untuk sementara pre-built database telah selesai dibuat. Tahap berikutnya adalah membuat sebuah aplikasi Android yang akan menggunakan database tersebut. 1. Jalankan Eclipse dan buat sebuah Android Project baru.

2. Buat sebuah class baru bernama DBAdapter dengan kode program di bawah ini. Anda tidak perlu mengetikkan sendiri kode program itu karena program selengkapnya bisa diunduh dari situs web dimana artikel ini berasal. Class ini dibuat untuk menempatkan sub-program yang menangani operasi-operasi database seperti pembuatan table, pengisian data, perubahan data, penghapusan data dan pemanggilan data. Tujuannya adalah tidak mencampur-adukkan logika bisnis dengan operasi tingkat rendah (SELECT, INSERT, UPDATE dan DELETE) yang akan membuat kode program sulit dibaca dan berkesan rumit sekali. Untuk tujuan kerapihan program, akan jauh lebih baik jika program utama fokus hanya pada jalannya alur program utama, sementara fungsi-fungsi database dipisahkan ke dalam class DBAdapter ini.

-5-

www.tobuku.com

package net.houseoflife.dbsample; import import import import import import import import import java.io.FileOutputStream; java.io.IOException; java.io.InputStream; java.io.OutputStream; android.content.Context; android.database.SQLException; android.database.sqlite.SQLiteDatabase; android.database.sqlite.SQLiteException; android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter { private static final String DATABASE_PATH="/data/data/net.houseoflife.dbsample/databases/"; private static final String DATABASE_NAME="productdemo.sqlite"; private static final int DATABASE_VERSION=1; private final Context context; private DatabaseHelper dbHelper; private SQLiteDatabase db; public DBAdapter(Context ctx) { this.context = ctx; dbHelper = new DatabaseHelper(this.context); } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context ctx) { super(ctx, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { //do nothing. The event is handled by the "prepareDatabase" method. } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //do nothing. The event is handled by the "prepareDatabase" method. } } public DBAdapter open() throws SQLException { db = dbHelper.getWritableDatabase(); //or getReadableDatabase() for read only access return this; }

-6-

www.tobuku.com

public void close() { dbHelper.close(); } private boolean checkDatabase() { SQLiteDatabase checkDb = null; try { checkDb = SQLiteDatabase.openDatabase(DATABASE_PATH + DATABASE_NAME, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException ex) { //Database does not exist yet } if(checkDb != null) checkDb.close(); return checkDb != null ? true : false; } private void copyDatabase() throws IOException { //get the SQLite database in the "assets" folder InputStream input = context.getAssets().open(DATABASE_NAME); //copy to the device path OutputStream output = new FileOutputStream(DATABASE_PATH + DATABASE_NAME); byte[] buffer = new byte[1024]; int length; while ((length = input.read(buffer))>0) output.write(buffer,0,length); output.flush(); output.close(); input.close(); } public void prepareDatabase() { if(this.checkDatabase()) { //do nothing. The database already exists } else { try { this.copyDatabase() ; } catch (IOException ex) { throw new Error ("Error copying database");

-7-

www.tobuku.com

} } } }

Untuk mempermudah pemahaman kerja dari sub-program ini, silakan memulainya dari method prepareDatabase. Saat method ini dipanggil ia akan menjalankan method lain yang bernama checkDatabase. Fungsi method checkDatabase cukup jelas, yaitu ia memeriksa keberadaan file database yang diwakili oleh konstanta DATABASE_PATH + DATABASE_NAME (dalam hal ini adalah "/data/data/net.houseoflife.dbsample/databases/productdemo.sqlite"). Ini adalah lokasi dan nama file database SQLite yang mestinya ada di dalam perangkat Android, namun ada kemungkinan file itu tidak ada di sana jika aplikasi ini dijalankan pertama kali. Jika file itu belum ada maka fungsi openDatabase akan memicu sebuah error, itu sebabnya pemanggilan fungsi ini harus ada di dalam blok try-catch supaya program tidak berhenti. Saat terjadi error, maka method checkDatabase akan mengembalikan nilai FALSE yang artinya adalah file database tidak ada di dalam perangkat. Saat nilai yang dikembalikan adalah FALSE maka baris program selanjutnya akan memanggil method copyDatabase yang akan berusaha menyalin file database yang ada di dalam folder aplikasi (yaitu folder assets) ke dalam perangkat Android. Perhatikan baik-baik beberapa potongan kode program berikut ini karena itu adalah bagian terpenting dari uraian ini.InputStream input = context.getAssets().open(DATABASE_NAME); ...

Program mempersiapkan sumber penyalinan data, yaitu file database yang diwakili oleh konstanta DATABASE_NAME. Fungsi getAssets digunakan untuk mencari file tersebut di dalam folder assets. Program mempersiapkan target penyalinan data, yaitu ke dalam perangkat Android yang lokasinya diwakili oleh DATABASE_PATH + DATABASE_NAME. Data dari file database dibaca sepotong demi sepotong (besar sebuah potongan adalah 1024 byte) menggunakan fungsi read kemudian ditulis dengan fungsi write.

OutputStream output = new FileOutputStream(DATABASE_PATH + DATABASE_NAME); ... byte[] buffer = new byte[1024]; int length; while ((length = input.read(buffer))>0) output.write(buffer,0,length);

-8-

www.tobuku.com

3. Buka class MainActivity, dan tambahkan kode program berikut ini.package net.houseoflife.dbsample; import import import import import android.app.Activity; android.database.Cursor; android.database.SQLException; android.os.Bundle; android.widget.Toast;

public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DBAdapter db = new DBAdapter(this); db.prepareDatabase(); try { db.open(); //read the data Cursor c = db.getAllProducts(); if (c.moveToFirst()) { do { Toast.makeText(MainActivity.this, c.getString(0) + "; " + c.getString(1) + "; " + c.getString(2) + " " + c.getFloat(3), Toast.LENGTH_SHORT).show(); } while (c.moveToNext()); } else Toast.makeText(MainActivity.this, "No data", Toast.LENGTH_SHORT).show(); db.close(); } catch (SQLException sqle) { Toast .makeText(this, sqle.getMessage(), Toast.LENGTH_SHORT).show(); } } }

-9-

www.tobuku.com

4. Sebagai langkah terakhir, ada satu hal lagi yang harus dipersiapkan yaitu menyalin file database pre-built productdemo.sqlite yang telah dipersiapkan pada langkah awal tadi ke dalam folder projek - tepatnya ke dalam folder assets seperti diperlihatkan pada gambar di bawah ini.

Pastikan nama file itu muncul pada Package Explorer di dalam Eclipse. Refresh folder assets jika file tersebut belum tampak.

Setelah langkah terakhir ini selesai dilakukan, silakan menjalankan aplikasi tersebut.

- 10 -

www.tobuku.com

Saat aplikasi itu dieksekusi, tampak data-data yang ada di dalam database ditampilkan secara bergantian. Bila ini yang terjadi, maka bisa dipastikan program telah berjalan dengan baik.

Mari kita telaah lebih jauh apa yang telah dilakukan oleh program ini. 1. Pada Eclipse, jalankan menu Windows Open Perspective DDMS.

2. Pada File Explorer, buka folder data/data//databases. Pada contoh ini namespace adalah net.houseoflife.dbsample. Perhatikan path ini adalah sama dengan nilai konstanta DATABASE_PATH pada kode program yang ditunjukkan tadi. Path ini menyatakan lokasi file database di dalam perangkat Android. Apakah Anda menemukan file productdemo.sqlite di dalam lokasi tersebut? Jika ya, maka method copyDatabase yang dijelaskan tadi telah bekerja dengan baik. Ia berhasil menyalin file dari folder assets ke dalam lokasi ini seperti yang diharapkan.

- 11 -

www.tobuku.com

Sekarang kita akan melakukan beberapa pengujian akhir. Hapus file productdemo.sqlite yang ada di dalam perangkat Android dengan tombol bertanda minus merah seperti ditunjukkan pada gambar tadi. Jalankan kembali aplikasi tersebut. Apakah aplikasi itu masih bekerja normal menampilkan data-datanya? Saat kembali ke DDMS perspective apakah file productdemo.sqlite terbentuk kembali? Mari kita lakukan pengujian yang ke-dua. Hapus file database productdemo.sqlite yang ada di dalam folder assets kemudian jalankan kembali aplikasi tersebut. Apakah aplikasi itu masih bekerja normal menampilkan data-datanya? Setelah database ada di dalam perangkat Android, apakah aplikasi masih membutuhkan file yang ada di dalam folder assets? Semoga Anda bisa menjelaskan jawaban pertanyaan-pertanyaan di atas untuk memastikan Anda memahami konsep yang telah dijelaskan dengan panjang-lebar ini. Sumber: http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-androidapplications/

- 12 -