Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf ·...

12

Click here to load reader

Transcript of Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf ·...

Page 1: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

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 telah 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 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.

Page 2: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 2 -

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.

Page 3: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 3 -

CATATAN:

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

Page 4: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 4 -

4. Masukkan beberapa baris data ke dalam table tersebut dengan perintah INSERT seperti berikut ini.

INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Book','O Little Town','USD',11.5);

INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Book','A Dixie Christmas','USD',9.95);

INSERT INTO productlist (prodcategory, prodname, ccy, unitprice) VALUES('Book','The Adventures and the Memoirs of Sherlock

Holmes','USD',9.95);

INSERT INTO productlist (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 nüvi 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.4-

Inch','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).

Page 5: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 5 -

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.

Page 6: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 6 -

package net.houseoflife.dbsample;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import android.content.Context;

import android.database.SQLException;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteException;

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

}

Page 7: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 7 -

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

Page 8: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 8 -

}

}

}

}

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.

OutputStream output = new FileOutputStream(DATABASE_PATH +

DATABASE_NAME);

...

Program mempersiapkan target penyalinan data, yaitu ke dalam perangkat

Android yang lokasinya diwakili oleh DATABASE_PATH + DATABASE_NAME.

byte[] buffer = new byte[1024];

int length;

while ((length = input.read(buffer))>0)

output.write(buffer,0,length);

Data dari file database dibaca sepotong demi sepotong (besar sebuah

potongan adalah 1024 byte) menggunakan fungsi read kemudian ditulis

dengan fungsi write.

Page 9: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 9 -

3. Buka class MainActivity, dan tambahkan kode program berikut ini.

package net.houseoflife.dbsample;

import android.app.Activity;

import android.database.Cursor;

import android.database.SQLException;

import android.os.Bundle;

import 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();

}

}

}

Page 10: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 10 -

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.

Page 11: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 11 -

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/<namespace>/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.

Page 12: Aplikasi Android dengan Pre-built Database - tobuku.com Android dengan Pre-built Database.pdf · Langkah pertama tentunya mempersiapkan ... unitprice) VALUES('Software','Microsoft

www.tobuku.com

- 12 -

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-android-

applications/