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

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

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

ابدأ الدورة

مقدمة: لماذا ربط قواعد البيانات بـ C++



نادرًا ما تستغني التطبيقات الحديثة بلغة C++ عن التخزين الدائم للبيانات. سواء كان خادم ألعاب، أو نظام تليمتري، أو خلفية عالية التحميل — ستحتاج إلى التفاعل مع نظام إدارة قواعد البيانات (DBMS). يهيمن على السوق نهجان مختلفان جوهريًا: قواعد البيانات العلائقية (SQL) والموجهة للوثائق (NoSQL).



في هذه المقالة، سنشرح كيفية العمل مع PostgreSQL (عبر مكتبة libpqxx) وMongoDB (عبر برنامج التشغيل الرسمي لـ C++ mongo-cxx-driver). ستتعلم كيفية إعداد الاتصال، وتنفيذ عمليات CRUD، ومعالجة الأخطاء.



1. PostgreSQL و C++: النهج العلائقي



PostgreSQL هو نظام إدارة قواعد بيانات علائقي-كائني قوي مع دعم ممتاز للمعاملات والاستعلامات المعقدة. بالنسبة لـ C++، يُوصى باستخدام مكتبة libpqxx — وهي غلاف حديث وآمن من حيث الأنواع فوق libpq.



1.1 تثبيت libpqxx

يعتمد التثبيت على نظام التشغيل الخاص بك:

  • Ubuntu/Debian: sudo apt install libpqxx-dev
  • macOS (Homebrew): brew install libpqxx
  • Windows (vcpkg): vcpkg install libpqxx


1.2 الاتصال وتنفيذ الاستعلامات

لنلقِ نظرة على برنامج أدنى للاتصال بقاعدة البيانات، وإنشاء جدول، وإدراج البيانات:



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

int main() { try { // الاتصال بقاعدة البيانات pqxx::connection conn("dbname=testdb user=postgres password=secret hostaddr=127.0.0.1 port=5432"); if (conn.is_open()) { std::cout << "Connected to PostgreSQL: " << conn.dbname() << std::endl; }

// إنشاء معاملة 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 NOT NULL" ");");

// إدراج البيانات (مع استخدام المعاملات للأمان) txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);", "Alice", "alice@example.com");

// تأكيد المعاملة txn.commit();

std::cout << "Data inserted successfully." << std::endl;

} catch (const std::exception &e) { std::cerr << "Error: " << e.what() << std::endl; return 1; } return 0;}


1.3 قراءة البيانات

لجلب البيانات، استخدم المكررات فوق نتيجة الاستعلام:



pqxx::work txn(conn);pqxx::result result = txn.exec("SELECT id, name, email FROM users;");

for (auto row : result) { int id = row["id"].as<int>(); std::string name = row["name"].as<std::string>(); std::string email = row["email"].as<std::string>(); std::cout << id << ": " << name << " <" << email << ">" << std::endl;}


2. MongoDB و C++: النهج الموجه للوثائق



MongoDB يخزن البيانات بتنسيق BSON (JSON ثنائي). بالنسبة لـ C++، يُستخدم برنامج التشغيل الرسمي mongo-cxx-driver، المبني على مكتبة libmongoc.



2.1 تثبيت mongo-cxx-driver

  • Ubuntu: sudo apt install libmongoc-1.0-0 libbson-1.0-0 libmongocxx-dev
  • macOS: brew install mongo-cxx-driver
  • البناء من المصدر: يتطلب cmake و libmongoc و libbson.


2.2 الاتصال وعمليات CRUD

مثال على الاتصال بنسخة محلية من MongoDB وإدراج وثيقة:



#include <iostream>#include <bsoncxx/b                

المدونات

توصيات الكتب