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

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

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

ابدأ الدورة

مقدمة: لماذا يحتاج مطور C++ إلى قواعد البيانات؟

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



1. PostgreSQL في C++: كلاسيكيات قواعد البيانات العلائقية

PostgreSQL — نظام إدارة قواعد بيانات ناضج وموثوق مع دعم ممتاز للمعاملات والاستعلامات المعقدة. للعمل معه من C++، غالباً ما تُستخدم مكتبة libpqxx — الغلاف الرسمي لـ C++ فوق libpq.



التثبيت والتوصيل

قم بتثبيت libpqxx عبر مدير الحزم أو قم ببنائه من المصدر:

# Ubuntu/Debiansudo apt-get install libpqxx-dev

# macOS (Homebrew)brew install libpqxx

في CMakeLists.txt أضف:

find_package(PQXX REQUIRED)target_link_libraries(your_project pqxx::pqxx)


الاتصال بقاعدة البيانات واستعلام SELECT بسيط

لننظر إلى مثال بسيط — الحصول على قائمة المستخدمين:

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

int main() { try { // سلسلة الاتصال: "host=... dbname=... user=... password=..." pqxx::connection conn("host=localhost dbname=testdb user=admin password=secret"); pqxx::work txn(conn);

// تنفيذ الاستعلام pqxx::result result = txn.exec("SELECT id, name, email FROM users LIMIT 10");

for (auto row : result) { std::cout << "ID: " << row[0].as<int>() << ", Name: " << row[1].as<std::string>() << ", Email: " << row[2].as<std::string>() << std::endl; }

txn.commit(); // إنهاء المعاملة } catch (const std::exception &e) { std::cerr << "خطأ: " << e.what() << std::endl; return 1; } return 0;}

لاحظ: جميع العمليات مغلفة في كتلة try-catch — libpqxx يولد استثناءات عند أي أعطال.



الاستعلامات المعلمة (الأمان)

لا تقم أبداً بتسلسل السلاسل النصية لاستبدال القيم — فهذا يفتح الطريق لحقن SQL. استخدم التعبيرات المعدة:

pqxx::work txn(conn);// التحضيرconn.prepare("insert_user", "INSERT INTO users (name, email) VALUES ($1, $2)");

// التنفيذ مع المعاملاتtxn.exec_prepared("insert_user", "إيفان بيتروف", "ivan@example.com");txn.commit();


2. MongoDB في C++: مرونة NoSQL

MongoDB يخزن البيانات بتنسيق BSON (JSON ثنائي) وهو مناسب تماماً للمهام التي قد يتغير فيها مخطط البيانات. السائق الرسمي لـ C++ هو mongocxx (فوق mongoc).



تثبيت سائق mongocxx

البناء من المصدر هو الطريقة الأكثر موثوقية. تعليمات مختصرة:

# قم بتثبيت التبعيات: libmongoc, libbson, cmakegit clone https://github.com/mongodb/mongo-cxx-driver.gitcd mongo-cxx-driver/buildcmake .. -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_MNMLSTC=ONmake -j4sudo make install

في CMakeLists.txt:

find_package(libmongocxx REQUIRED)target_link_libraries(your_project mongocxx::mongocxx)


الاتصال وإدراج مستند

#include <iostream>#include <bsoncxx/json.hpp>#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>

int main() { // تهيئة السائق (مرة واحدة لكل تطبيق) mongocxx::instance inst{};

// ات

المدونات

توصيات الكتب