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.
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:
- PostgreSQL
- 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:
- Kita menyertakan header yang diperlukan, termasuk
libpq-fe.h
yang memberikan kita akses ke fungsi PostgreSQL. - Kita menggunakan
PQconnectdb()
untuk menyambungkan ke basis data. Ganti "testdb", "john", dan "secret" dengan nama basis data, nama pengguna, dan kata sandi Anda sebenarnya. - Kita memeriksa apakah koneksi sukses menggunakan
PQstatus()
. - Jika sukses, kita mencetak pesan yang gembira. Jika tidak, kita mencetak kesalahan dan keluar.
- 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