C++ में डेटाबेस के साथ काम करना: PostgreSQL और MongoDB व्यवहार में

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: C++ डेवलपर को डेटाबेस की आवश्यकता क्यों?

\n

C++ सबसे शक्तिशाली सिस्टम प्रोग्रामिंग भाषाओं में से एक है। हालाँकि, उच्च-लोड वाली परियोजनाओं में भी डेटा को सहेजे बिना काम चलाना मुश्किल होता है। चाहे वह गेम सर्वर हो, वित्तीय एप्लिकेशन हो या IoT सिस्टम — आपको एक विश्वसनीय भंडारण की आवश्यकता होगी। इस लेख में हम दो लोकप्रिय दृष्टिकोणों पर चर्चा करेंगे: रिलेशनल DBMS PostgreSQL और डॉक्यूमेंट-ओरिएंटेड MongoDB। आप सीखेंगे कि उन्हें C++ प्रोजेक्ट से कैसे जोड़ा जाए, बुनियादी संचालन कैसे किए जाएँ और सामान्य गलतियों से कैसे बचा जाए।

\n\n

1. C++ में PostgreSQL: रिलेशनल DB का क्लासिक

\n

PostgreSQL एक परिपक्व, विश्वसनीय DBMS है जिसमें ट्रांज़ैक्शन और जटिल क्वेरी के लिए उत्कृष्ट समर्थन है। C++ से इसके साथ काम करने के लिए, अक्सर libpqxx लाइब्रेरी का उपयोग किया जाता है — जो libpq के ऊपर एक आधिकारिक C++ रैपर है।

\n\n

स्थापना और कनेक्शन

\n

पैकेज मैनेजर के माध्यम से libpqxx स्थापित करें या स्रोत से बनाएँ:

\n
# Ubuntu/Debian\nsudo apt-get install libpqxx-dev\n\n# macOS (Homebrew)\nbrew install libpqxx
\n

CMakeLists.txt में जोड़ें:

\n
find_package(PQXX REQUIRED)\ntarget_link_libraries(your_project pqxx::pqxx)
\n\n

डेटाबेस से कनेक्शन और सरल SELECT

\n

आइए एक न्यूनतम उदाहरण देखें — उपयोगकर्ताओं की सूची प्राप्त करना:

\n
#include <iostream>\n#include <pqxx/pqxx>\n\nint main() {\n    try {\n        // कनेक्शन स्ट्रिंग: "host=... dbname=... user=... password=..."\n        pqxx::connection conn("host=localhost dbname=testdb user=admin password=secret");\n        pqxx::work txn(conn);\n\n        // क्वेरी निष्पादित करें\n        pqxx::result result = txn.exec("SELECT id, name, email FROM users LIMIT 10");\n\n        for (auto row : result) {\n            std::cout << "ID: " << row[0].as<int>()\n                      << ", Name: " << row[1].as<std::string>()\n                      << ", Email: " << row[2].as<std::string>() << std::endl;\n        }\n\n        txn.commit(); // ट्रांज़ैक्शन समाप्त करें\n    } catch (const std::exception &e) {\n        std::cerr << "त्रुटि: " << e.what() << std::endl;\n        return 1;\n    }\n    return 0;\n}
\n

ध्यान दें: सभी संचालन try-catch ब्लॉक में लपेटे गए हैं — libpqxx किसी भी विफलता पर अपवाद उत्पन्न करता है।

\n\n

पैरामीटरीकृत क्वेरी (सुरक्षा)

\n

मानों को प्रतिस्थापित करने के लिए स्ट्रिंग को कभी भी संयोजित न करें — यह SQL इंजेक्शन का रास्ता खोलता है। तैयार अभिव्यक्तियों का उपयोग करें:

\n
pqxx::work txn(conn);\n// तैयारी\nconn.prepare("insert_user", "INSERT INTO users (name, email) VALUES ($1, $2)");\n\n// पैरामीटर के साथ निष्पादन\ntxn.exec_prepared("insert_user", "इवान पेत्रोव", "ivan@example.com");\ntxn.commit();
\n\n

2. C++ में MongoDB: NoSQL का लचीलापन

\n

MongoDB डेटा को BSON (बाइनरी JSON) प्रारूप में संग्रहीत करता है और उन कार्यों के लिए उपयुक्त है जहाँ डेटा स्कीमा बदल सकता है। C++ के लिए आधिकारिक ड्राइवर mongocxx है (mongoc के ऊपर)।

\n\n

mongocxx ड्राइवर की स्थापना

\n

स्रोत से बनाना सबसे विश्वसनीय तरीका है। संक्षिप्त निर्देश:

\n
# निर्भरताएँ स्थापित करें: libmongoc, libbson, cmake\ngit clone https://github.com/mongodb/mongo-cxx-driver.git\ncd mongo-cxx-driver/build\ncmake .. -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_MNMLSTC=ON\nmake -j4\nsudo make install
\n

CMakeLists.txt में:

\n
find_package(libmongocxx REQUIRED)\ntarget_link_libraries(your_project mongocxx::mongocxx)
\n\n

कनेक्शन और दस्तावेज़ सम्मिलन

\n
#include <iostream>\n#include <bsoncxx/json.hpp>\n#include <mongocxx/client.hpp>\n#include <mongocxx/instance.hpp>\n#include <mongocxx/uri.hpp>\n\nint main() {\n    // ड्राइवर आरंभीकरण (प्रति एप्लिकेशन एक बार)\n    mongocxx::instance inst{};\n\n    // कनेक्शन URI\n    mongocxx::uri uri("mongodb://localhost:27017");\n    mongocxx::client client(uri);\n\n    // डेटाबेस और संग्रह प्राप्त करें\n    auto db = client["testdb"];\n    auto collection = db["users"];\n\n    // एक दस्तावेज़ बनाएँ\n    bsoncxx::builder::stream::document document{};\n    document << "name" << "अन्ना स्मिर्नोवा"\n            << "email" << "anna@example.com"\n            << "age" << 28;\n\n    // दस्तावेज़ सम्मिलित करें\n    auto result = collection.insert_one(document.view());\n    std::cout << "सम्मिलित दस्तावेज़ ID: " << result->inserted_id().get_oid().value.to_string() << std::endl;\n\n    return 0;\n}

ब्लॉग

पुस्तक अनुशंसाएँ