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!

SQLite - C/C++

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:

  1. Kita menyertakan header yang diperlukan: stdio.h untuk input/output dan sqlite3.h untuk fungsi SQLite.
  2. Dalam main(), kita deklarasikan pointer ke sqlite3, yang mewakili koneksi basis data kita.
  3. Kita menggunakan sqlite3_open() untuk membuka (atau membuat) basis data bernama "test.db".
  4. Kita memeriksa apakah koneksi sukses. Jika tidak, kita cetak pesan kesalahan.
  5. 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:

  1. Kita membuka basis data seperti sebelumnya.
  2. Kita tentukan pernyataan SQL untuk membuat tabel bernama STUDENTS dengan kolom ID, NAME, AGE, dan GRADE.
  3. Kita menggunakan sqlite3_exec() untuk menjalankan pernyataan SQL ini.
  4. 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