مقدمة في العمل مع قواعد البيانات بلغة C++
\n\nنادراً ما تستغني التطبيقات الحديثة عن تخزين البيانات. C++ هي لغة برمجة أنظمة قوية، مناسبة تماماً للمشاريع عالية التحميل التي تعمل مع قواعد البيانات. في هذه المقالة، سنشرح كيفية الاتصال بنظامي إدارة قواعد بيانات شائعين — PostgreSQL العلائقية و MongoDB الموجهة للوثائق — وتنفيذ العمليات الأساسية (CRUD).
\n\nالمادة موجهة للمبتدئين: ستتعرف على المكتبات المطلوبة، وكيفية تثبيتها، وسترى أمثلة جاهزة للكود. بعد القراءة، ستتمكن من دمج C++ مع أي من قاعدتي البيانات هاتين بنفسك.
\n\nPostgreSQL في C++: النهج العلائقي
\n\nPostgreSQL هي واحدة من أكثر أنظمة إدارة قواعد البيانات العلائقية مفتوحة المصدر موثوقية. للعمل معها من C++، تُستخدم مكتبة libpqxx — الغلاف الرسمي لمكتبة libpq بلغة C.
\n\nتثبيت libpqxx
\n\nفي Linux (Ubuntu/Debian)، يتم التثبيت بأمر واحد:
\n\nsudo apt-get install libpqxx-dev\n\nبالنسبة لـ Windows، يمكن استخدام vcpkg:
\n\nvcpkg install libpqxx\n\nالاتصال وتنفيذ الاستعلام
\n\nلننظر إلى مثال بسيط: الاتصال بقاعدة البيانات، إنشاء جدول، وإدراج البيانات.
\n\n#include <iostream>\n#include <pqxx/pqxx>\n\nint main() {\n try {\n // الاتصال بقاعدة البيانات (استبدل المعلمات بمعلماتك)\n pqxx::connection conn("dbname=testdb user=postgres password=secret hostaddr=127.0.0.1 port=5432");\n \n if (conn.is_open()) {\n std::cout << "تم الاتصال بـ PostgreSQL بنجاح!" << std::endl;\n }\n\n // إنشاء معاملة\n pqxx::work txn(conn);\n\n // إنشاء جدول\n txn.exec("CREATE TABLE IF NOT EXISTS users ("\n "id SERIAL PRIMARY KEY, "\n "name VARCHAR(100) NOT NULL, "\n "email VARCHAR(100) UNIQUE NOT NULL)");\n\n // إدراج البيانات\n txn.exec("INSERT INTO users (name, email) VALUES "\n "('إيفان بيتروف', 'ivan@example.com'), "\n "('ماريا سميرنوفا', 'maria@example.com')");\n\n // تأكيد المعاملة\n txn.commit();\n std::cout << "تمت إضافة البيانات بنجاح!" << std::endl;\n\n } catch (const std::exception &e) {\n std::cerr << "خطأ: " << e.what() << std::endl;\n return 1;\n }\n return 0;\n}\n\nقراءة البيانات (SELECT)
\n\nلاسترجاع البيانات، استخدم مكرر النتيجة:
\n\npqxx::work txn(conn);\npqxx::result result = txn.exec("SELECT id, name, email FROM users");\n\nfor (const auto &row : result) {\n int id = row["id"].as<int>();\n std::string name = row["name"].as<std::string>();\n std::string email = row["email"].as<std::string>();\n std::cout << id << " | " << name << " | " << email << std::endl;\n}\n\nهام: استخدم دائماً الاستعلامات ذات المعلمات للحماية من حقن SQL:
\n\ntxn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2)",\n "أليكسي", "alex@example.com");\n\nMongoDB في C++: النهج الموجه للوثائق
\n\nMongoDB هي قاعدة بيانات NoSQL، تخزن البيانات بتنسيق BSON (JSON ثنائي). بالنسبة لـ C++، يوجد برنامج تشغيل رسمي يسمى mongocxx.
\n\nتثبيت mongocxx
\n\nالتثبيت على Linux (يتطلب تثبيت MongoDB C Driver مسبقاً):
\n\nsudo apt-get install libmongoc-dev libbson-dev\ngit clone https://github.com/mongodb/mongo-cxx-driver.git\ncd mongo-cxx-driver\nmkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_MNMLSTC=ON\nmake -j4\nsudo make install\n\nالاتصال وعمليات CRUD
\n\nيوضح الكود التالي الاتصال بـ