Anda di halaman 1dari 12

www.tobuku.

com

Aplikasi Android dengan Pre-built Database


Desember 2011 Oleh : Feri Djuandi Platform : ndroid 2!"# $%li&se# '()ite
Tingkat: Pemula

Menengah Mahir

Pembahasan database &ada a&likasi ndroid selama ini mengasumsikan database '()ite belum terbentuk atau tidak disertakan di dalam &rogram sehingga database akan dibuat &ada saat a&likasi &ertama kali dijalankan! Pada kondisi tersebut database dalam keadaan kosong *tidak mengandung data a&a&un+# ke%uali han,a terdiri dari sebuah atau bebera&a table ,ang dibuat bersamaan dengan database tersebut menggunakan &erintah -.$ T$! /agaimana seandain,a &rogrammer hendak mendistribusikan sebuah a&likasi ndroid ,ang mengandung database dengan data ,ang telah di&ersia&kan0 Mungkinkah sebuah a&likasi ndroid men,ertakan prebuilt database di dalam &aket instalasin,a0 Dengan semakin berkembangn,a &enggunaan &erangkat ndroid dalam a&likasi bisnis maka ada ban,ak sekali kebutuhan dari hal ini# misaln,a untuk memuat daftar &roduk dan harga &ada a&likasi &enjualan# daftar rekanan bengkel dan alamat &ada a&likasi klaim asuransi# simulasi kredit &ada a&likasi &embia,aan# daftar &roduk dan &remi asuransi &ada a&likasi ilustrasi dan &enera&an-&enera&an lainn,a 1 ,ang semuan,a itu membutuhkan database berisi data ,ang sudah disia&kan sebelumn,a! rtikel ini akan menjelaskan konse& dan teknik dasar &embuatan &re-built database# mengemasn,a di dalam a&likasi serta &enggunaann,a saat a&likasi dijalankan! 'emoga uraian ini menjadi to&ik ,ang menarik bagi nda! )angkah &ertama tentun,a mem&ersia&kan &re-built database itu sendiri# ,ang umumn,a menggunakan sebuah database management tool ,ang akan membantu &rogrammer dalam mem&ersia&kan sebuah database '()ite! Dengan bantuan 2oogle seorang &rogrammer da&at dengan mudah menemukan bebera&a database manager untuk '()ite# namun salah satu ,ang %uku& &o&uler adalah SQLite Manager! Program '()ite Manager berbentuk add-on ,ang diinstal &ada &rogram Mozilla Firefox, oleh karena itu harus di&astikan &rogram bro3ser tersebut telah terinstal sebelumn,a &ada kom&uter nda! '()ite Manager adalah &rogram ,ang sangat sederhana dan &raktis# namun bisa memenuhi ham&ir semua ke&erluan &rogrammer! 4a memiliki menu untuk membuat database# table# inde5# 6ie3 dan trigger7 serta sebuah kotak untuk menulis dan menjalankan &erintah '()! 'ebuah &rogram ,ang %uku& lengka& dan mudah digunakan! Program '()ite Manager da&at dunduh se%ara gratis &ada alamat berikut ini: htt&s:88addons!mo9illa!org8id8firefo58addon8s:lite-manager8 Pada uraian ini akan digunakan sebuah %ontoh database ,ang memuat data &roduk se&erti ,ang digunakan &ada a&likasi &enjualan! ngga&lah bah3a nda sedang mem&ersia&kan sebuah daftar &roduk dari sebuah &erusahaan# kemudian data ini akan digunakan oleh &ara &emasar melalui smart&hone ndroid-n,a dan a&likasi ,ang nda kembangkan!

-1-

www.tobuku.com 1! ;alankan SQLite Manager menggunakan &rogram Mo9illa Firefo5 melalui menu Tools SQLite Manager! 2! ;alankan menu Database New Database untuk membuat sebuah database '()ite baru ,ang bernama productdemo.sqlite! nda bebas untuk menem&atkan file databasen,a &ada folder mana&un di dalam kom&uter!

"! Pada tab xecute SQL# ketikkan &erintah berikut ini untuk membuat sebuah table bernama productlist!
CREATE TABLE productlist ( _id INTEGER PRIMARY KEY AUTOINCREMENT, prodcategory TEXT, prodname TEXT, ccy TEXT, unitprice FLOAT );

;alankan &erintah tersebut dengan menekan tombol !un SQL! Pastikan table itu telah terbentuk tan&a &esan kesalahan!

-2-

www.tobuku.com

"#T#T#N$ /erikut ini adalah ti&e-ti&e data ,ang didukung oleh '()ite:

-"-

www.tobuku.com

<! Masukkan bebera&a baris data ke dalam table tersebut dengan &erintah 4='$.T se&erti 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 %rowse and Searc& untuk melihat isi dari table tersebut *&astikan table &rodu%tlist telah disorot+!

-<-

www.tobuku.com

?ntuk sementara &re-built database telah selesai dibuat! Taha& berikutn,a adalah membuat sebuah a&likasi ndroid ,ang akan menggunakan database tersebut! 1! ;alankan clipse dan buat sebuah #ndroid 'ro(ect baru!

2! /uat sebuah %lass baru bernama D%#dapter dengan kode &rogram di ba3ah ini! nda tidak &erlu mengetikkan sendiri kode &rogram itu karena &rogram selengka&n,a bisa diunduh dari situs 3eb dimana artikel ini berasal! -lass ini dibuat untuk menem&atkan sub-&rogram ,ang menangani o&erasi-o&erasi database se&erti &embuatan table# &engisian data# &erubahan data# &engha&usan data dan &emanggilan data! Tujuann,a adalah tidak men%am&ur-adukkan logika bisnis dengan o&erasi tingkat rendah *'$)$-T# 4='$.T# ?PD T$ dan D$)$T$+ ,ang akan membuat kode &rogram sulit diba%a dan berkesan rumit sekali! ?ntuk tujuan kera&ihan &rogram# akan jauh lebih baik jika &rogram utama fokus han,a &ada jalann,a alur &rogram utama# sementara fungsi-fungsi database di&isahkan ke dalam %lass D/ da&ter ini!

->-

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; }

-@-

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");

-A-

www.tobuku.com

} } } }

?ntuk mem&ermudah &emahaman kerja dari sub-&rogram ini# silakan memulain,a dari method prepareDatabase! 'aat method ini di&anggil ia akan menjalankan method lain ,ang bernama c&ec)Database! Fungsi method %he%kDatabase %uku& jelas# ,aitu ia memeriksa keberadaan file database ,ang di3akili oleh konstanta D T / '$CP TD E D T / '$C= M$ *dalam hal ini adalah F8data8data8net!houseoflife!dbsam&le8databases8&rodu%tdemo!s:liteF+! 4ni adalah lokasi dan nama file database '()ite ,ang mestin,a ada di dalam &erangkat ndroid# namun ada kemungkinan file itu tidak ada di sana jika a&likasi ini dijalankan &ertama kali! ;ika file itu belum ada maka fungsi openDatabase akan memi%u sebuah error# itu sebabn,a &emanggilan fungsi ini harus ada di dalam blok tr,-%at%h su&a,a &rogram tidak berhenti! 'aat terjadi error# maka method %he%kDatabase akan mengembalikan nilai F )'$ ,ang artin,a adalah file database tidak ada di dalam &erangkat! 'aat nilai ,ang dikembalikan adalah F )'$ maka baris &rogram selanjutn,a akan memanggil method cop*Database ,ang akan berusaha men,alin file database ,ang ada di dalam folder a&likasi *,aitu folder assets+ ke dalam &erangkat ndroid! Perhatikan baik-baik bebera&a &otongan kode &rogram berikut ini karena itu adalah bagian ter&enting dari uraian ini!
InputStream input = context.getAssets().open(DATABASE_NAME); ...

Program mem&ersia&kan sumber &en,alinan data# ,aitu file database ,ang di3akili oleh konstanta D T / '$C= M$! Fungsi get#ssets digunakan untuk men%ari file tersebut di dalam folder assets! Program mem&ersia&kan target &en,alinan data# ,aitu ke dalam &erangkat ndroid ,ang lokasin,a di3akili oleh D T / '$CP TD E D T / '$C= M$! Data dari file database diba%a se&otong demi se&otong *besar sebuah &otongan adalah 102< b,te+ 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);

-B-

www.tobuku.com

"! /uka %lass Main#cti+it*# dan tambahkan kode &rogram 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(); } } }

-G-

www.tobuku.com

<! 'ebagai langkah terakhir# ada satu hal lagi ,ang harus di&ersia&kan ,aitu men,alin file database &re-built productdemo.sqlite ,ang telah di&ersia&kan &ada langkah a3al tadi ke dalam folder &rojek - te&atn,a ke dalam folder assets se&erti di&erlihatkan &ada gambar di ba3ah ini!

Pastikan nama file itu mun%ul &ada 'ac)age xplorer di dalam $%li&se! Refresh folder assets jika file tersebut belum tam&ak!

'etelah langkah terakhir ini selesai dilakukan# silakan menjalankan a&likasi tersebut!

- 10 -

www.tobuku.com

'aat a&likasi itu dieksekusi# tam&ak data-data ,ang ada di dalam database ditam&ilkan se%ara bergantian! /ila ini ,ang terjadi# maka bisa di&astikan &rogram telah berjalan dengan baik!

Mari kita telaah lebih jauh a&a ,ang telah dilakukan oleh &rogram ini! 1! Pada $%li&se# jalankan menu ,indows -pen 'erspecti+e DDMS!

2! Pada File Explorer# buka folder data.data./namespace0.databases! Pada %ontoh ini names&a%e adalah net!houseoflife!dbsam&le! Perhatikan path ini adalah sama dengan nilai konstanta D T / '$CP TD &ada kode &rogram ,ang ditunjukkan tadi! Path ini men,atakan lokasi file database di dalam &erangkat ndroid! &akah nda menemukan file &rodu%tdemo!s:lite di dalam lokasi tersebut0 ;ika ,a# maka method %o&,Database ,ang dijelaskan tadi telah bekerja dengan baik! 4a berhasil men,alin file dari folder assets ke dalam lokasi ini se&erti ,ang dihara&kan!

- 11 -

www.tobuku.com

'ekarang kita akan melakukan bebera&a &engujian akhir! Da&us file &rodu%tdemo!s:lite ,ang ada di dalam &erangkat ndroid dengan tombol bertanda minus merah se&erti ditunjukkan &ada gambar tadi! ;alankan kembali a&likasi tersebut! &akah a&likasi itu masih bekerja normal menam&ilkan data-datan,a0 'aat kembali ke DDM' &ers&e%ti6e a&akah file &rodu%tdemo!s:lite terbentuk kembali0 Mari kita lakukan &engujian ,ang ke-dua! Da&us file database &rodu%tdemo!s:lite ,ang ada di dalam folder assets kemudian jalankan kembali a&likasi tersebut! &akah a&likasi itu masih bekerja normal menam&ilkan data-datan,a0 'etelah database ada di dalam &erangkat ndroid# a&akah a&likasi masih membutuhkan file ,ang ada di dalam folder assets0 'emoga nda bisa menjelaskan ja3aban &ertan,aan-&ertan,aan di atas untuk memastikan nda memahami konse& ,ang telah dijelaskan dengan &anjang-lebar ini! Sumber$ htt&:88333!reigndesign!%om8blog8using-,our-o3n-s:lite-database-in-androida&&li%ations8

- 12 -

Anda mungkin juga menyukai