PostgreSQL - Antarmuka C/C++: Panduan untuk Pemula

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

PostgreSQL - C/C++

Instalasi

Sebelum kita mulai mengoding, kita perlu mengatur lingkungan kita. Picturing 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 begitu 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 diinstal, jangan lupa untuk memulai layanan PostgreSQL. Pada sebagian besar sistem, Anda dapat melakukan ini dengan:

sudo service postgresql start

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

Antarmuka API C/C++

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

Fungsi Deskripsi
PQconnectdb() Menyambung 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 sekarang. Kita akan menggunakan setiap dari mereka segera, dan Anda akan melihat betapa ramah mereka sebenarnya!

Menghubungkan ke Basis Data

Marilah kita mulai dengan dasar - menghubungkan ke basis data. Itu seperti mengukir 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 menghubungkan ke basis data. Ganti "testdb", "john", dan "secret" dengan nama basis data, pengguna, dan kata sandi Anda sebenarnya.
  3. Kita memeriksa apakah koneksi sukses menggunakan PQstatus().
  4. Jika sukses, kita cetak pesan senang. Jika tidak, kita cetak kesalahan dan keluar.
  5. Akhirnya, kita tutup koneksi dengan PQfinish().

Kompilasi program ini dengan:

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

Jalankan program ini, dan jika semua berjalan lancar, Anda akan melihat "Terhubung ke basis data secara sukses!". Selamat, Anda baru saja berjabat tangan dengan PostgreSQL!

Membuat Tabel

Sekarang kita dalam, marilah kita buat sebuah tabel. Picturing ini 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 otomatis dinaikkan untuk setiap entri baru - sangat praktis!

Operasi INSERT

Marilah kita menambahkan 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 dimasukkan secara sukses!\n");
PQclear(res);

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

Operasi SELECT

Sekarang, marilah 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 melalui sel di spreadsheet kita!

Operasi UPDATE

kadang-kadang kita perlu mengubah data kita. Marilah 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, tapi kita menggunakan perintah SQL UPDATE saja.

Operasi DELETE

Akhirnya, marilah 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 menutupi operasi CRUD (Create, Read, Update, Delete) 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 setelah memasak - itu menjaga dapur (dan program Anda) berjalan mulus.

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

Credits: Image by storyset