PostgreSQL - Antara C/C++: Panduan Pemula

Hai, para ahli basis data masa depan! Saya sangat senang untuk menjadi panduan Anda dalam perjalanan yang menarik ke dunia PostgreSQL dan C/C++. Sebagai seseorang yang telah mengajar ilmu komputer selama tahun-tahun, saya bisa menjamin Anda bahwa kombinasi ini seperti mentega dan selai - mereka hanya bekerja secara menyenangkan! Jadi, mari kita lipatkan lengan dan langsung masuk.

PostgreSQL - C/C++

Instalasi

Sebelum kita mulai mengoding, kita perlu mengatur lingkungan kita. PERTanyaan ini seperti menyiapkan dapur Anda sebelum memasak makanan kelas dunia. Kita akan memerlukan dua bahan utama:

  1. PostgreSQL
  2. libpq (pustaka klien C PostgreSQL)

Untuk pengguna Windows, unduh penginstal PostgreSQL dari situs web resmi. Itu mudah seperti menginstal program lain - hanya ikuti wizard!

Untuk teman-teman Linux kami, itu bahkan lebih sederhana. Buka terminal Anda dan ketik:

sudo apt-get install postgresql postgresql-contrib libpq-dev

Pengguna Mac, Anda juga tidak terkecuali! Gunakan Homebrew:

brew install postgresql

Setelah terinstal, jangan lupa untuk memulai layanan PostgreSQL. Di kebanyakan sistem, Anda bisa melakukan ini dengan:

sudo service postgresql start

Bagus! Sekarang dapur kita (iya, lingkungan pengembangan) siap. Mari kita mulai memasak... ya, saya bermaksud mengoding!

Antarmuka API C/C++

PostgreSQL menyediakan set fungsi C yang memungkinkan kita untuk berinteraksi dengan basis data. Fungsi-fungsi ini adalah alat kita, seperti sendok dan kuas di dapur. Berikut ini adalah yang utama yang kita akan gunakan:

Fungsi Deskripsi
PQconnectdb() Menyambungkan ke basis data
PQfinish() Menutup koneksi basis data
PQexec() Menjalankan perintah SQL
PQstatus() Memeriksa status koneksi
PQresultStatus() Memeriksa hasil query
PQntuples() Mengembalikan jumlah baris dalam hasil
PQnfields() Mengembalikan jumlah kolom dalam hasil
PQgetvalue() Mengambil nilai field dari hasil

Jangan khawatir jika ini terlihat menakutkan saat ini. Kita akan menggunakan masing-masing dari mereka segera, dan Anda akan melihat betapa ramah mereka sebenarnya!

Menyambungkan ke Basis Data

mari kita mulai dengan dasar-dasar - menyambungkan ke basis data. Itu seperti mengkoplokan pintu dan mengatakan, "Hai, PostgreSQL! Boleh saya masuk?"

#include <stdio.h>
#include <stdlib.h>
#include <libpq-fe.h>

int main() {
PGconn *conn = PQconnectdb("dbname=testdb user=john password=secret");

if (PQstatus(conn) == CONNECTION_BAD) {
fprintf(stderr, "Koneksi ke basis data gagal: %s\n", PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}

printf("Terhubung ke basis data secara sukses!\n");
PQfinish(conn);
return 0;
}

mari kitauraikan ini:

  1. Kita menyertakan header yang diperlukan, termasuk libpq-fe.h yang memberikan kita akses ke fungsi PostgreSQL.
  2. Kita menggunakan PQconnectdb() untuk menyambungkan ke basis data. Ganti "testdb", "john", dan "secret" dengan nama basis data, nama pengguna, dan kata sandi Anda sebenarnya.
  3. Kita memeriksa apakah koneksi sukses menggunakan PQstatus().
  4. Jika sukses, kita mencetak pesan yang gembira. Jika tidak, kita mencetak kesalahan dan keluar.
  5. Akhirnya, kita menutup koneksi dengan PQfinish().

Kompilasikan program ini dengan:

gcc -o connect connect.c -I/usr/include/postgresql -lpq

Jalankan itu, dan jika semua berjalan lancar, Anda akan melihat "Terhubung ke basis data secara sukses!". Selamat, Anda baru saja melakukan pengenalan dengan PostgreSQL!

Membuat Tabel

Sekarang kita dalam, mari kita buat sebuah tabel. Itu seperti membuat spreadsheet baru di Excel.

PGresult *res = PQexec(conn, "CREATE TABLE students (id SERIAL PRIMARY KEY, name VARCHAR(100), age INT)");

if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "Gagal membuat tabel: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}

printf("Tabel dibuat secara sukses!\n");
PQclear(res);

Di sini, kita menggunakan PQexec() untuk menjalankan perintah SQL. Kita membuat tabel "students" dengan tiga kolom: id, name, dan age. Tipe SERIAL untuk id berarti itu akan secara otomatis bertambah untuk setiap entri baru - sangat praktis!

Operasi INSERT

Mari kita tambahkan beberapa data ke tabel kita. Itu seperti mengisi baris di spreadsheet kita.

const char *insert_query = "INSERT INTO students (name, age) VALUES ($1, $2)";
const char *param_values[2] = {"Alice", "20"};
int param_lengths[2] = {strlen(param_values[0]), strlen(param_values[1])};
int param_formats[2] = {0, 0};

PGresult *res = PQexecParams(conn, insert_query, 2, NULL, param_values, param_lengths, param_formats, 0);

if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "Gagal melakukan INSERT: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}

printf("Data ditambahkan secara sukses!\n");
PQclear(res);

Di sini, kita menggunakan PQexecParams() instead of PQexec(). Fungsi ini memungkinkan kita untuk menggunakan parameter dalam query, yang lebih aman dan efisien. Placeholder $1 dan $2 dalam query adalah tempat pengganti untuk parameter kita.

Operasi SELECT

Sekarang, mari kita mengambil data kita. Itu seperti melihat apa yang kita tulis di spreadsheet kita.

PGresult *res = PQexec(conn, "SELECT * FROM students");

if (PQresultStatus(res) != PGRES_TUPLES_OK) {
fprintf(stderr, "Gagal melakukan SELECT: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}

int rows = PQntuples(res);
int cols = PQnfields(res);

for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%s\t", PQgetvalue(res, i, j));
}
printf("\n");
}

PQclear(res);

Di sini, kita menggunakan PQntuples() untuk mendapatkan jumlah baris, PQnfields() untuk jumlah kolom, dan PQgetvalue() untuk mengambil nilai field. Itu seperti melihat setiap sel di spreadsheet kita!

Operasi UPDATE

kadang-kadang kita perlu mengubah data kita. Mari kita memperbarui umur Alice:

const char *update_query = "UPDATE students SET age = $1 WHERE name = $2";
const char *param_values[2] = {"21", "Alice"};
int param_lengths[2] = {strlen(param_values[0]), strlen(param_values[1])};
int param_formats[2] = {0, 0};

PGresult *res = PQexecParams(conn, update_query, 2, NULL, param_values, param_lengths, param_formats, 0);

if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "Gagal melakukan UPDATE: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}

printf("Data diperbarui secara sukses!\n");
PQclear(res);

Ini mirip dengan operasi INSERT kita, tetapi kita menggunakan perintah SQL UPDATE saja.

Operasi DELETE

Akhirnya, mari kita belajar bagaimana menghapus data. Itu seperti menghapus baris dari spreadsheet kita.

const char *delete_query = "DELETE FROM students WHERE name = $1";
const char *param_values[1] = {"Alice"};
int param_lengths[1] = {strlen(param_values[0])};
int param_formats[1] = {0};

PGresult *res = PQexecParams(conn, delete_query, 1, NULL, param_values, param_lengths, param_formats, 0);

if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "Gagal melakukan DELETE: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
exit(1);
}

printf("Data dihapus secara sukses!\n");
PQclear(res);

Dan itu adalah! Kita telah mencakup operasi CRUD (Create, Read, Update, Delete) dasar dengan PostgreSQL dan C. Ingat, latihan membuat sempurna. Cobalah menggabungkan operasi ini, tambahkan penanganan kesalahan, dan segera Anda akan menjadi ninja PostgreSQL!

Selalu ingat untuk membebaskan hasil Anda dengan PQclear() dan menutup koneksi Anda dengan PQfinish() saat Anda selesai. Itu seperti membersihkan dapur Anda setelah memasak - itu menjaga dapur Anda (dan program Anda) berjalan mulus.

Selamat mengoding, para ahli basis data masa depan! Semoga query Anda cepat dan koneksi Anda tidak pernah putus!

Credits: Image by storyset