SQLite - C/C++ untuk Pemula
Hai sana, calon para pemrogrammer! Hari ini, kita akan memulai sebuah perjalanan menarik ke dalam dunia SQLite menggunakan C/C++. Jangan khawatir jika Anda belum pernah menulis satu baris kode sebelumnya - kita akan mulai dari dasar dan naik turun ke level yang lebih tinggi. Pada akhir panduan ini, Anda akan terkejut atas apa yang Anda capai!
Apa Itu SQLite?
Sebelum kita masuk ke dalam kode, mari kita mengenal apa itu SQLite. Bayangkan Anda memiliki sebuah buku catatan digital tempat Anda dapat menyimpan berbagai jenis informasi dengan cara yang terorganisir. Itu sebenarnya apa yang SQLite lakukan - sebuah database ringan, berdasarkan file, yang tidak memerlukan proses server terpisah. Itu seperti memiliki sebuah database mini di celana Anda!
API Antarmuka C/C++
Untuk berinteraksi dengan SQLite menggunakan C/C++, kita perlu menggunakan sesuatu yang disebut API (Application Programming Interfaces). Bayangkan ini sebagai alat khusus yang memungkinkan program C/C++ kita untuk berkomunikasi dengan SQLite. Berikut adalah API utama yang kita akan gunakan:
Fungsi API | Deskripsi |
---|---|
sqlite3_open() | Membuka koneksi ke database SQLite |
sqlite3_exec() | Menjalankan pernyataan SQL |
sqlite3_close() | Menutup koneksi database |
sqlite3_errmsg() | Mengembalikan pesan kesalahan |
Jangan khawatir jika ini terlihat menakutkan saat ini. Kita akan menjelajahi masing-masing dengan banyak contoh!
Menyambung ke Database
Mari kita mulai dengan menyambung ke database. Ini seperti membuka buku catatan digital kita untuk mulai menulis.
#include <stdio.h>
#include <sqlite3.h>
int main() {
sqlite3 *db;
int rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Tidak dapat membuka database: %s\n", sqlite3_errmsg(db));
return(0);
} else {
fprintf(stderr, "Database dibuka dengan sukses\n");
}
sqlite3_close(db);
return 0;
}
mari kitauraikan ini:
- Kita menyertakan header yang diperlukan:
stdio.h
untuk input/output dansqlite3.h
untuk fungsi SQLite. - Dalam
main()
, kita deklarasikan sebuah pointer kesqlite3
, yang mewakili koneksi database kita. - Kita menggunakan
sqlite3_open()
untuk membuka (atau membuat) sebuah database bernama "test.db". - Kita memeriksa apakah koneksi sukses. Jika tidak, kita cetak pesan kesalahan.
- Akhirnya, kita tutup koneksi database dengan
sqlite3_close()
.
Membuat Tabel
Sekarang kita memiliki buku catatan digital kita terbuka, mari kita buat sebuah halaman untuk menyimpan beberapa informasi. Dalam istilah database, kita menyebut ini tabel.
int main() {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Tidak dapat membuka database: %s\n", sqlite3_errmsg(db));
return(0);
}
char *sql = "CREATE TABLE STUDENTS("
"ID INT PRIMARY KEY NOT NULL,"
"NAME TEXT NOT NULL,"
"AGE INT NOT NULL,"
"GRADE CHAR(1) );";
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Kesalahan SQL: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Tabel dibuat dengan sukses\n");
}
sqlite3_close(db);
return 0;
}
Dalam contoh ini:
- Kita buka database seperti sebelumnya.
- Kita tentukan pernyataan SQL untuk membuat tabel bernama STUDENTS dengan kolom ID, NAME, AGE, dan GRADE.
- Kita menjalankan pernyataan SQL ini dengan
sqlite3_exec()
. - Kita memeriksa apakah eksekusi sukses dan mencetak pesan yang sesuai.
Operasi INSERT
Bagus! Kita memiliki tabel. Sekarang mari kita tambahkan beberapa data ke dalamnya.
char *sql = "INSERT INTO STUDENTS (ID,NAME,AGE,GRADE) "
"VALUES (1, 'Alice', 20, 'A' ); "
"INSERT INTO STUDENTS (ID,NAME,AGE,GRADE) "
"VALUES (2, 'Bob', 21, 'B' ); ";
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Kesalahan SQL: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Rekord ditambahkan dengan sukses\n");
}
Di sini, kita menambahkan dua rekord ke dalam tabel STUDENTS. Pernyataan SQL menggunakan sintaks INSERT INTO untuk menambahkan baris baru.
Operasi SELECT
Sekarang, mari kita mengambil data yang kita masukkan. Ini tempat keajaiban database benar-benar bersinar!
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
for(int i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
// Dalam main()
char *sql = "SELECT * from STUDENTS";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Kesalahan SQL: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Operasi selesai dengan sukses\n");
}
Contoh ini memperkenalkan fungsi callback. Ketika kita SELECT data, SQLite memanggil fungsi ini untuk setiap baris dalam hasil. Itu seperti memiliki seorang asisten yang membaca setiap entri di buku catatan kita!
Operasi UPDATE
Apa bila kita membuat kesalahan dan perlu mengubah beberapa data? Itu di mana UPDATE masuk.
char *sql = "UPDATE STUDENTS set GRADE = 'A' where ID=2";
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Kesalahan SQL: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Rekord diperbarui dengan sukses\n");
}
Pernyataan SQL ini mengubah nilai GRADE Bob menjadi A. Bagus kerja, Bob!
Operasi DELETE
kadang-kadang, kita perlu menghapus data. Mari kita lihat bagaimana menghapus rekord.
char *sql = "DELETE from STUDENTS where ID=2";
rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Kesalahan SQL: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Rekord dihapus dengan sukses\n");
}
Ini menghapus rekord Bob dari tabel kita. Maaf, Bob!
Dan itu saja! Kita telah meliputi dasar-dasar bekerja dengan SQLite di C/C++. Ingat, pemrograman seperti belajar bahasa baru - itu memerlukan latihan. Jangan frustasi jika hal-hal tidak langsung berjalan mulus. Tetap mencoba, dan segera Anda akan menulis aplikasi database seperti seorang ahli!
Credits: Image by storyset