العمل مع قواعد البيانات في C++: PostgreSQL وMongoDB

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع قواعد البيانات في C++: PostgreSQL و MongoDB



نادرًا ما تستغني التطبيقات الحديثة في C++ عن التفاعل مع قواعد البيانات. بغض النظر عما إذا كنت تطور خادمًا عالي التحميل، أو نظام تحليلات، أو برمجيات مدمجة، فإن القدرة على العمل مع أنظمة إدارة قواعد البيانات العلائقية (PostgreSQL) والموجهة للمستندات (MongoDB) هي مهارة إلزامية. في هذه المقالة، سنشرح الاتصال وتنفيذ الاستعلامات ومعالجة الأخطاء لكلا النظامين بأمثلة عملية.



1. إعداد البيئة واختيار المكتبات



للعمل مع PostgreSQL في C++، المعيار الفعلي هو مكتبة libpqxx. أما بالنسبة لـ MongoDB، فالمشغل الرسمي هو mongocxx (المبني على libmongoc).



تثبيت libpqxx (Linux / macOS)

# Ubuntu / Debiansudo apt-get install libpqxx-dev

# macOS (Homebrew)brew install libpqxx


تثبيت mongocxx (Linux / macOS)

# يتطلب تثبيت libmongoc و boost مسبقًاsudo apt-get install libmongoc-1.0-0 libbson-1.0 libmongocxx-dev

# macOSbrew install mongo-cxx-driver


بالنسبة لنظام Windows، استخدم vcpkg أو قم بتنزيل الإصدارات المجمعة مسبقًا من المستودعات الرسمية.



2. العمل مع PostgreSQL عبر libpqxx



توفر مكتبة libpqxx واجهة C++ مريحة فوق مشغل C libpq. الفئات الرئيسية: connection، work (معاملة)، result.



الاتصال بقاعدة البيانات

#include <iostream>#include <pqxx/pqxx>

int main() { try { // سلسلة الاتصال: "dbname=test user=postgres password=secret hostaddr=127.0.0.1 port=5432" pqxx::connection conn("dbname=testdb user=myuser password=mypass hostaddr=localhost"); if (conn.is_open()) { std::cout << "Connected to PostgreSQL: " << conn.dbname() << std::endl; } } catch (const std::exception &e) { std::cerr << "Connection error: " << e.what() << std::endl; return 1; } return 0;}


تنفيذ الاستعلامات (CRUD)

void createTable(pqxx::connection &conn) {    pqxx::work txn(conn);    txn.exec("CREATE TABLE IF NOT EXISTS users ("             "id SERIAL PRIMARY KEY,"             "name VARCHAR(100) NOT NULL,"             "email VARCHAR(255) UNIQUE,"             "age INT"             ")");    txn.commit();}

void insertUser(pqxx::connection &conn, const std::string &name, const std::string &email, int age) { pqxx::work txn(conn); // نستخدم استعلامًا مع معلمات للحماية من حقن SQL txn.exec_params("INSERT INTO users (name, email, age) VALUES ($1, $2, $3)", name, email, age); txn.commit(); std::cout << "User inserted." << std::endl;}

void selectUsers(pqxx::connection &conn) { pqxx::nontransaction txn(conn); pqxx::result result = txn.exec("SELECT id, name, email, age FROM users"); for (auto row : result) { std::cout << "ID: " << row["id"].as<int>() << ", Name: " << row["name"].as<std::string>() << ", Email: " << row["email"].as<std::string>() << ", Age: " << row["age"].as<int>() << std::endl; }}


معالجة الأخطاء

قم بتغليف جميع العمليات في try-catch. تقوم libpqxx بتوليد استثناءات من الفئات pqxx::sql_error، pqxx::broken_connection وغيرها.



3. العمل مع MongoDB عبر mongocxx



يستخدم مشغل mongocxx معيار C++17 الحديث. الكيانات الرئيسية: client، database، collection، document (عبر bsoncxx).



الاتصال والحصول على المجموعة

#include <ios                

المدونات

توصيات الكتب