Pembuatan Database
Ada 2 method yg perlu kita implementasikan yaitu onCreate dan onUpgrade, dan juga method constructor. Pada method constructor kita berikan parameter berupa nama dan versi database.
Database akan dibuat saat object dari SQLiteOpenHelper dibuat (instantiate) dan selanjutnya memanggil method getWritableDatabase.
Compile dan jalankan aplikasinya, lalu buka Android Device Monitor maka anda akan mendapati bahwa database sudah terbuat.
Desain Database
Let say kita ingin membuat aplikasi daftar tugas. Maka skema pada tabel akan kurang lebih seperti berikut:
nama_tugas | status_selesai |
---|---|
antar anak sekolah | sudah |
beli susu anak yg masih bayi | sudah |
nulis blog | belum |
Ingat method onCreate diatas?. Saya jelaskan sebelumnya bahwa method ini dapat anda gunakan untuk membuat skema pada tabel. Jadi seharusnya jika anda melakukan eksekusi perintah SQL berikut ini, maka table akan terbuat:
create table daftar_tugas_ku (‘nama_tugas' text, ‘status_selesai' integer)
Tetapi nyatanya tidak demikian. Jika sekarang anda buka lagi databasenya dengan SQLite Professional, maka anda akan mendapati bahwa tabel tidak terbentuk sebagaimana mestinya. Mengapa demikian?
:-) Ya, saya sengaja menjebak anda :-)
Lalu bagaimana solusinya? Anda dapat mengulang dari awal dengan meng-uninstall aplikasi dan meletakkan statemen SQL pada method onCreate sehingga skema tabel akan di-inisialisasi pada saat database dibuat.
Solusi kedua, jika anda tidak ingin mengulang dari awal adalah dengan menggunakan method onUpgrade. Tetapi method ini tidak akan terpanggil apabila versi database tetap sama, oleh karena itu mari kita ubah versi database. Jika tadi kita set versi-nya dengan nilai “1” sekarang mari kita ubah menjadi “2”.
Jika anda jalankan lagi sekarang maka seharusnya skema tabel sudah terbentuk sesuai keinginan kita.
Data Entry
Untuk melakukan manipulasi pada database ada harus terlebih dahulu mendapatkan referensi ke objek SQLiteDatabase. Untuk itu anda dapat menggunakan method getWritableDatabase atau getReadableDatabase tergantung kebutuhan.
Selanjutnya anda dapat menggunakan execSQL utk meng-eksekusi perintah SQL.
Namun membuat perintah SQL seperti ini dengan menggabungkan string dan parameter input sangatlah tidak disarankan karena pastinya akan sering terjadi kesalahan syntax SQL (contoh: kurang tanda petik, dll)
Oleh karena itu dianjurkan untuk menggunakan insert & ContentValues sebagai alternatif yg lebih baik. ContentValues berupa map dengan nama kolom sebagai key dan nilai kolom sebagai value.
Query Database
Sama halnya dengan insert, ada dua cara yg dapat digunakan untuk melakukan query pada database. Yg pertama adalah dengan menggunakan rawQuery namun pastinya akan sangat rentan terhadap kesalahan.
Sebagai alternatif, android menyediakan query pada object SQLiteDatabase dengan parameter yg cukup panjang tetapi dapat meminimalisasi kesalahan pembuatan perintah SQL secara manual. Paremeter pertama tentunya adalah tabel yg menjadi target, parameter kedua adalah array dari nama kolom yg akan di ambil datanya, parameter ketiga & ke-empat merupakan kriteria pencarian yg masing-masing berupa nama kolom dan nilainya, dan yg seterusnya berkaitan dengan grouping & sorting dimana anda dapat mengabaikannya dengan memberikan nilai null jika tidak diperlukan.
Contoh, misal anda ingin mendapatkan data daftar tugas diseleksi berdasarkan status yg sudah selesai, maka anda dapat menggunakannya seperti berikut:
Jika anda perhatikan, method ini meng-hasilkan objek Cursor. Sama halnya seperti tabel, Cursor mempunyai baris dan kolom. Untuk mengambil data hasil pencarian anda gunakan moveToFirst dan moveToNext untuk iterasi baris dikombinasikan dengan getString, getInt, getLong, getShort, getFloat, getDouble (tergantung tipe data kolom) untuk mendapat nilai dari kolom pada baris tersebut.
Antarmuka Aplikasi
Penggunaan CursorAdapter sendiri tidak jauh berbeda dengan ArrayAdapter. Jika saat menggunakan ArrayAdapter, kita memberikan implementasi getView pada subclass kita, dalam pembuatan CursorAdapter, kita diharuskan menyediakan implementasi dari method newView dan bindView. Konsepnya tetap sama pada kedua method ini kita membuat sebuah view yg akan nantinya menjadi view yg men-display item pada list. Perbedaannya terletak pada newView digunakan untuk meng-inflate view sedangkan bindView digunakan untuk setting data pada view.
Ok, mari lihat contoh penggunaannya. Saya buat class baru sebagai subclass dari CursorAdapter dan meng-override method bindView dan newView.
Lalu saya memakainya di MainActivity.
Tetapi pada saat saya jalankan, saya dapatkan error seperti dibawah ini:
The Cursor must include a column named "_id" or this class will not work
Untungnya kita dapat mengakali ini, dengan mengganti query kita seperti berikut tanpa harus mengubah skema database:Sekarang, pada saat saya jalankan lagi aplikasi berjalan sebagai mana mestinya.
Cukup sekian dulu, mudah-mudahan bermanfaat bagi rekan-rekan sekalian. Terima kasih.
Sumber:
- Head First Android Development, Jonathan Simon, O’Reilly Media
- http://www.sqlite.org/footprint.html
- http://stackoverflow.com/questions/3359414/android-column-id-does-not-exist
No comments:
Post a Comment