IV Basis Data pada J2ME
IV.1 Sekilas Tentang Basis Data pada J2ME
IV Basis Data pada J2ME
IV.1 Sekilas Tentang Basis Data pada J2ME
Penyimpanan informasi/data pada perangkat mobile di J2ME dapat menggunakan dua cara yaitu: a. Menyimpan data pada suatu file yang diletakkan pada direktori res
b. Menggunakan Record Management System (RMS)
Cara pertama mempunyai kelemahan yaitu data yang telah ditulis pada file tersebut tidak dapat diubah lagi ketika MIDlet sedang runtime. Cara kedua, yaitu menggunakan RMS, adalah cara yang lazim digunakan untuk penyimpanan data pada perangkat mobile. RMS memungkinkan proses penyimpanan dan pengambilan data dapat dilakukan seperti pada basis data konvensional yaitu Create, Retrieve, Update dan Delete atau yang biasa disingkat CRUD. Pada bab ini akan dibahas mengenai RMS saja.
Spesifikasi RMS telah ada sejak MIDP 1.0. Hal ini menjanjikan bahwa perangkat mobile yang MIDPcompliant memiliki RMS. RMS menjamin integritas data yang disimpannya. Akan tetapi perlu diperhatikan thread yang menggunakan data pada RMS tersebut.
Data yang disimpan oleh RMS secara fisik dapat ditempatkan di lebih dari satu tempat. Tempat‐tempat yang biasanya dipakai antara lain pada Ram perangkat mobile dan media penyimpanan yang dapat digunakan oleh perangkat mobile seperti flash disk. Data yang disimpan dalam RMS disebut record. Record merupakan data yang berbentuk array of byte. Pustaka RMS terdapat dalam package javax.microedition.rms.
56
IV.2 RecordStore
Kelas RecordStore pada RMS berfungsi menyediakan fitur untuk menyimpan, mengupdate, mengambil dan menghapus data pada perangkat mobile. Kelas RecordStore merepresentasikan sebuah lokasi penyimpanan data permanen. Satu RecordStore dapat digunakan oleh lebih dari satu MIDlet baik pada saat bersamaan maupun terpisah. Berdasarkan spesifikasi MIDP, vendor perangkat mobile bertanggung jawab pada pemeliharaan integritas obyek RecordStore.
Antar MIDlet dapat berbagi RecordStore. Pada versi MIDP lama, sebelum MIDP 2.0, MIDlet hanya dapat mengakses obyek RecordStore selama MIDlet tersebut adalah pemilik obyek RecordStore atau masih dalam satu MIDlet suite dengan MIDlet pemilik obyek RecordStore. Pada MIDP 2.0 terdapat fitur baru di mana RecordStore dapat dibagi dengan MIDlet lain dari MIDlet suite yang berbeda dengan MIDlet pemilik RecordStore. Gambar IV‐1 mengilustrasikan dua MIDlet suite berbagi RecordStore.
Gambar IV‐2 Hubungan antara MIDlet dengan suatu RecordStore
Dalam kelas RecordStore didefinisikan tiga static method untuk membuat dan membuka obyek RecordStore. Method‐method tersebut adalah sebagai berikut:
a. static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary)
b. static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary, int authMode, boolean writable)
c. static RecordStore openRecordStore(String recordStoreName, String vendorName, String suiteName)
Masing‐masing method diatas memiliki kegunaan sendiri‐sendiri. Method pertama merupakan method untuk membuka dan membuat RecordStore yang dibuat oleh MIDlet itu sendiri atau MIDlet lain yang masih dalam satu MIDlet suite. Method kedua merupakan method untuk membuat dan mengakses RecordStore yang shared antar MIDlet suite. Method ketiga khusus digunakan untuk mengakses
57
RecordStore yang shared antar MIDlet suite. Pemanggilan method openRecordStore() dapat menimbulkan exception dikarenakan beberapa hal seperti kapasitas memori perangkat mobile yang sudah penuh (RecordStoreFullException) ataupun internal error
(RecordStoreException).
Mekanisme dari method pertama ketika dipanggil adalah mencari RecordStore dengan nama sesuai dengan parameter recordStoreName yang dimasukkan. Jika RecordStore dengan nama tersebut ditemukan maka RecordStore itu akan dibuka. Jika tidak terdapat RecordStore dengan nama tersebut maka akan dilihat nilai dari parameter createIfNecessary yang diberikan. Jika nilainya true maka akan dibuat sebuah RecordStore baru dengan nama seperti pada parameter recordStoreName. Jika nilainya false maka tidak akan dibuat RecordStore baru. Pemberian nama untuk RecordStore harus memenuhi persyaratan sebagai berikut:
a. Panjang sebuah nama 32 Unicode character
b. Nama harus memperhatikan huruf kapital dan huruf non kapital (case sensitive) c. Nama harus unik di dalam sebuah MIDlet suite
Method kedua digunakan untuk membuka (mungkin juga menciptakan) RecordStore yang dapat
diakses oleh MIDlet baik dalam MIDlet suite yang sama ataupun MIDlet suite yang berbeda. RecordStore yang tercipta dari pemanggilan method ini menjadi milik MIDlet suite yang menciptakannya meskipun dapat diakses oleh MIDlet suite lain. Pada method kedua didefinisikan mode akses RecordStore apada parameter authMode. Mode akses ada dua jenis yaitu akses yang hanya mengijinkan pemilik RecordStore dan mode akses yang mengijinkan MIDlet suite lain untuk menggunakan RecordStore. Parameter writeable ditujukan untuk MIDlet suite lain yang mengakses RecordStore. Jika RecordStore hanya dapat diakses MIDlet suite pemiliknya maka nilai parameter ini diabaikan. Pemilik RecordStore selalu dapat menulis pada RecordStore, jadi parameter writeable hanya akan berpengaruh pada MIdlet suite lain apakah diijinkan menulis pada RecordStore atau tidak. Berikut akan disajikan potongan kode program yang menunjukkan cara pemanggilan method kedua.
Listing IV‐1 Contoh pembuatan RecordStore yang dapat diakses MIDlet suite lain
import javax.microedition.rms.*; ... try{ RecordStore rs = RecordStore.openRecordStore("MyData",true, RecordStore.AUTHMODE_ANY,false); rs.deleteRecord(1); rs.closeRecordStore(); }catch{RecordStoreException rse){
58
Tabel IV‐1 Konstanta Akses Informasi RecordStore
Nilai Parameter Deskripsi
AUTHMODE_PRIVATE Akses hanya dibatasi pada suite tempat obyek
RecordStore bersangkutan ditempatkan
AUTHMODE_ANY Mengijinkan akses oleh semua MIDlet di suite manapun. Gunakan parameter ini untuk membuat
Obyek
RecordStore yang sharable
Method ketiga digunakan untuk membuka RecordStore milik MIDlet suite lain. Suatu MIDlet suite
dapat mengakses RecordStore milik MIDlet suite yang lain hanya jika RecordStore tersebut diijinkan untuk diakses oleh MIDlet suite lain selain pemiliknya. Jika tidak mendapatkan ijin maka SecurityException akan terjadi. Parameter vendorName dan suiteName harus disesuaikan dengan Midlet-Vendor dan Midlet-Name pada file JAD (lebih lanjut tentang file JAD dijelaskan di Bab 8). Jika method ini digunakan oleh MIDlet dalam MIDlet suite pemilik RecordStore maka efeknya akan sama dengan menggunakan method pertama tanpa membuat RecordStore baru openRecordStore(recordStoreName, false). Berikut disajikan potongan kode program contoh pemanggilan method ketiga
Listing IV‐2 Contoh pengambilan RecordStore yang Dibuat MIDlet suite lain
import javax.microedition.rms.*; ... try{
RecordStore rs =
RecordStore.openRecordStore("MyData",
"Sun Microsystems", "Jupiter");
byte[] data = rs.getRecord(1);
rs.closeRecordStore(); }catch(RecordStoreException rse){
//tangani error di sini }
Setelah obyek RecordStore yang telah dibuka dapat diperoleh informasi berkenaan dengan obyek tersebut. Informasi tersebut antara lain mengenai nama, ukuran, versi, dan waktu terakhir obyek RecordStore dimodifikasi. Method‐method untuk mengetahui informasi RecordStore dapat dilihat pada table IV‐2.
59
Tabel IV‐2 Daftar method untuk mengambil informasi RecordStore
Nama Method Deskripsi
String getName() Mengembalikan nama dari obyek RecordStore
int getSize() Mengembalikan ukuran ruang dalam byte yang ditempati
oleh obyek RecordStore. Ukuran tersebut meliputi
overhead termasuk overhead yang diperlukan untuk
implementasi stuktur data yang diterapkan oleh obyek RecordStore.
int getSizeAvailable() Mengembalikan tempat yang masih tersisa pada
RecordStore
long getLastModified() Mengembalikan informasi waktu kapan RecordStore
dimodifikasi terakhir kali. Penulisan informasi waktu ini menggunakan format yang sama dengan yang digunakan oleh System.currentTimeMillis().
int getVersion() Mengembalikan versi RecordStore. Setiap obyek
RecordStore dimodifikasi, seperti waktu ketika record ditambah, dimodifikasi, atau dihapus, maka versinya ditambah satu.
int getNumRecords() Mengembalikan jumlah data/record yang saat ini ada
dalam sebuah obyek RecordStore.
Obyek RecordStore yang tidak digunakan lagi sebaiknya segera dihapus untuk menyediakan tempat bagi RecordStore yang lainnya. Untuk penghapusan RecordStore terdapat static method dari kelas RecordStore sebagai berikut
static void deleteRecordStore(String recordStoreName)
Sebelum menghapus suatu obyek RecordStore pastikan tidak ada MIDlet yang sedang/masih menggunakanya atau memerlukan data dalam RecordStore tersebut. RecordStoreException akan dihasilkan jika RecordStore yang akan dihapus sedang dibuka oleh MIDlet lain baik dalam satu MIDlet suite atau lain MIDlet suite. RecordStoreNotFoundException akan muncul ketika RecordStore yang akan dihapus tidak tersedia.
Untuk mengetahui RecordStore apa saja yang dimiliki oleh suatu MIDlet suite maka RecordStore menyediakan sebuah static method untuk mendapatkan nama RecordStore dari suatu MIDlet suite.
Method tersebut adalah sebagai berikut.
60
RecordStore yang ditampilkan hanyalah RecordStore milik dari MIDlet suite tempat MIDlet pemangil static method tersebut.