SQLite - C/C++ untuk Pemula
Hai teman-teman yang sedang belajar! Hari ini, kita akan memulai perjalanan menarik ke dunia SQLite menggunakan C/C++. Jangan khawatir jika Anda belum pernah menulis baris kode sebelumnya - kita akan mulai dari dasar dan mencapai tingkat yang lebih tinggi. Pada akhir tutorial ini, Anda akan terkejut melihat apa yang Anda capai!
Apa Itu SQLite?
Sebelum kita mendalam ke kode, mari kita pahami apa itu SQLite. Bayangkan Anda memiliki buku catatan digital tempat Anda dapat menyimpan berbagai informasi secara terorganisir. Itu sebenarnya apa SQLite - sebuah basis data berbasis file yang ringan dan tidak memerlukan proses server terpisah. Itu seperti memiliki basis data mini di poket Anda!
API Antarmuka C/C++
Untuk berinteraksi dengan SQLite menggunakan C/C++, kita perlu menggunakan sesuatu yang disebut API (Application Programming Interface). 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 basis data SQLite |
sqlite3_exec() | Menjalankan pernyataan SQL |
sqlite3_close() | Menutup koneksi basis data |
sqlite3_errmsg() | Mengembalikan pesan kesalahan |
Jangan khawatir jika ini terlihat menakutkan sekarang. Kita akan menjelajahi masing-masing dengan banyak contoh!
Menyambung ke Basis Data
Mari kita mulai dengan menyambung ke basis data. 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 basis data: %s\n", sqlite3_errmsg(db));
return(0);
} else {
fprintf(stderr, "Basis data dibuka berhasil\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 pointer kesqlite3
, yang mewakili koneksi basis data kita. - Kita menggunakan
sqlite3_open()
untuk membuka (atau membuat) basis data bernama "test.db". - Kita memeriksa apakah koneksi sukses. Jika tidak, kita cetak pesan kesalahan.
- Akhirnya, kita menutup koneksi basis data dengan
sqlite3_close()
.
Membuat Tabel
Sekarang kita telah membuka buku catatan, mari kita buat halaman untuk menyimpan informasi. Dalam istilah basis data, ini disebut tabel.
int main() {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Tidak dapat membuka basis data: %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 berhasil\n");
}
sqlite3_close(db);
return 0;
}
Dalam contoh ini:
- Kita membuka basis data seperti sebelumnya.
- Kita tentukan pernyataan SQL untuk membuat tabel bernama STUDENTS dengan kolom ID, NAME, AGE, dan GRADE.
- Kita menggunakan
sqlite3_exec()
untuk menjalankan pernyataan SQL ini. - 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 berhasil\n");
}
Di sini, kita menambahkan dua rekord ke 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 basis data 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 berhasil\n");
}
Contoh ini memperkenalkan fungsi callback. Ketika kita melakukan SELECT, SQLite memanggil fungsi ini untuk setiap baris di dalam hasil. Itu seperti memiliki 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 ke dalam gambar.
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 berhasil\n");
}
Pernyataan SQL ini mengubah nilai GRADE Bob menjadi A. Pekerjaan bagus, 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 berhasil\n");
}
Ini menghapus rekord Bob dari tabel kita. Maaf, Bob!
Dan itu dia! Kita telah meliputi dasar-dasar kerja dengan SQLite dalam C/C++. Ingat, pemrograman seperti belajar bahasa baru - itu memerlukan latihan. Jangan frustasi jika hal-hal belum jelas segera. Terus mencoba, dan segera Anda akan menulis aplikasi basis data seperti seorang ahli!
Credits: Image by storyset