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!

SQLite - C/C++

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:

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

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