Senin, 15 September 2014

Membuat Program Database Sederhana Dengan SQLite (C)


SQLite merupakan library yang menyediakan fitur manajemen database untuk software. Sudah dari dulu SQLite banyak dikenal karena memiliki keistimewaan tersendiri. Dengan ukuran yang lumayan kecil, SQLite sudah dapat menyediakan hampir semua kode kueri seperti pada MySQL. Selain itu, dengan menggunakan SQLite, kita mendapatkan beberapa keuntungan, antara lain:
  • Program tidak terlalu terpengaruh dalam hal kecepatan, karena SQLite berukuran sangat kecil dibandingkan software database lain(mis. MySQL)
  • Lebih sederhana dan mudah, karena SQLite tidak membutuhkan username, password dan file konfigurasi apapun.
  • Instalasi mudah, karena inti SQLite hanya terdiri atas sebuah file library saja.
Sudah banyak pengembang software yang mem-binding SQLite dan menggunakannya sebagai manajer database default-nya, salah satu contohnya adalah Mozilla Firefox. Tak ayal lagi, SQLite sangat cocok digunakan untuk manajer database software kita.

Mari kita mulai

SQLite dapat menyimpan database dalam file. Jika diperlukan, kita juga bisa membuat database sementara(temporary) yang disimpan dalam RAM. Untuk membuat atau membuka database, kita menggunakan fungsi sqlite3_open. Argumen pertama(*filename) adalah nama file yang akan dibuka. Jika file belum ada, SQLite akan membuat file tersebut. Jika argumen pertama adalah “:memory:” atau 0, maka sqlite akan membuat database dalam memori. Argumen kedua(**ppDb) adalah pointer-to-pointer yang menunjuk ke struktur data sqlite (struct sqlite3). Struktur data ini berperan sebagai handle.
Berikut ini adalah bentuk fungsinya lebih jelas..

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);


Setelah database ditentukan, kita dapat mulai menjalankan query untuk melakukan apapun seperti yang biasanya manajer database lakukan. Jika biasa melakukan pemrograman PHP, fungsi yang akan kita bahas berikut ini memiliki fungsi yang sama dengan mysql_query, hanya saja disini argumennya lebih eksplisit. Berikut ini adalah bentuk fungsinya..

int sqlite3_exec(
  sqlite3*,              /* An open database */
  const char *sql,       /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**), /* Callback function */
  void *,                /* 1st argument to callback */
  char **errmsg          /* Error msg written here */
);


Seperti yang kita lihat, fungsi ini memiliki 5 parameter. Argumen pertama(sqlite3*) adalah pointer ke struktur daya sqlite. Seperti biasa, fungsinya adalah sebagai handle yang menyimpan statistik database yang telah dibuka. Yang kedua adalah pointer ke string yang berisi kode query. Saya rasa tidak perlu penjelasan pada bagian ini, sebagian besar kode sama seperti MySQL. Jika anda nanti anda mengalami kesalahan query, mungkin anda menggunakan beberapa kode yang berbeda dengan MySQL. Yang ketiga adalah fungsi callback untuk menerima data hasil query. Jika kode query yang diberikan tidak mengembalikan data, argumen ini boleh dibiarkan kosong. Sementara itu, bentuk fungsi callback akan kita bahas sebentar lagi. Lanjut ke parameter ke-empat, argumen ini penggunaannya tidak wajib alias opsional, jadi kita boleh biarkan kosong. Penggunaannya hanya diperlukan jika kita perlu data tambahan pada fungsi callback. Apabila kita menyertakan argumen pada argumen ini, SQLite akan menunjkkannya pada argumen pertama fungsi callback. Parameter terakhir merupakan pointer-to-pointer yang menunjuk pada buffer yang berisikan pesan error, jika eksekusi kode query terjadi kesalahan, pesan errornya bisa kita baca dari sini.
Oke, kita sudah membahas point terpenting dari bahasi query. Sebelum membahas ke fungsi paling akhir(sqlite3_close), kita jangan sampai lupa untuk memahami bentuk fungsi callback-nya. Berikut ini adalah bentuk fungsi callback-nya..

int callback(void* callback_data, int jml_kolom, char **isi_kolom, char **nama_kolom)
{
//kode
}


Sebenarnya kode diatas tidak perlu saya jelaskan juga, karena nama parameternya sengaja saya tulis dalam bahasa Indonesia. Tapi, biar lebih afdol dan semua jenis pembaca bisa paham, biarkan saya memenuhi tutorial ini dengan sedikit penjelasan setiap argumen fungsi callback di atas. Yang paling pertama adalah argumen yang berisi data opsional. Seperti yang telah dijelaskan pada fungsi sqlite3_exec – argumen keempat. Berikutnya, ada argumen kedua yang merupakan jumlah kolom dari hasil query. Ingat, jumlah kolom, bukan jumlah baris. Jadi, fungsi callback ini akan dipanggil untuk menerima data setiap baris satu per satu. Nah, selanjutnya parameter isi_kolom adalah array data yang masing-masing adalah isi dari kolom hasil pembacaan query. Terakhir adalah nama_kolom, tentu saja isinya adalah array dari nama-nama kolom data.

Dan, akhirnya, kita sampai untuk membahas fungsi paling terakhir, sekaligus fungsi paling sederhana.
int sqlite3_close(sqlite3*);

Jika sudah selesai melakukan manajemen database, kita dianjurkan untuk memberitahukan SQLite. Sebenarnya, statistik data secara otomatis akan terhapus ketika program selesai tanpa harus memanggil fungsi ini. Akan tetapi, jika kita menangani banyak data, fungsi ini terkadang diperlukan jua. Fungsi ini cukup menggunakan sebuah argumen yaitu pointer ke struktur data sqlite seperti fungsi sebelumnya.

Error Codes
Jika anda perhatikan baik-baik, maka anda akan tahu bahwa semua fungsi di atas mengembalikan nilai int. Apa gunanya/maksudnya?
Hampir semua fungsi SQLIte mengembalikan nilai integer(int), yang menunjukkan status hasil pemanggilan fungsi. Jika semua argumen benar dan tidak terjadi error, maka nilai kembalinya adalah 0 (atau ditulis dengan SQLITE_OK), selain itu, bisa jadi ada kesalahan.

Source Demo
Untuk memahami fungsi ini dalam, lihatlah source, header sekaligus DLL dalam link berikut.
(header dapat didapatkan pada situs resmi dengan nama “sqlite3_almagation” dan DLL dapat diperoleh pula dengan nama “sqlite_dll”)
Create_db.c : membuat table dalam database
Insert_db.c : mengisi table yang telah dibuat dengan beberapa data
Show_db.c : menampilkan database yang telah dibuatkan table dan diisikan data

https://app.box.com/s/80psou8z4zb0mk9g3cmi

Untuk pendukung, saya juga menyertakan ebook kecil didalamnya, yang sebelumnya sudah saya baca untuk memahami SQLite

Compiling dan Linking
Untuk mengompile program, saya menggunakan GCC dengan perintah seperti berikut:
gcc -Wall –o create_db.exe create_db.c sqlite3.dll
gcc -Wall –o insert_db.exe insert_db.c sqlite3.dll
gcc -Wall –o show_db.exe show_db.c sqlite3.dll

(source dan DLL harus ada dalam 1 folder)

Hasil




Load disqus comments

0 comments