الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]كيف اربط قاعدة بيانت مع برنامجي

مغلق
بدأه nizarnizario في 2 يوليو 2012 · 1 رد · 679 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله تعالى وبركاته

هذا اول موضوع لي في هذا المنتدى الراقي وارجوا ان لا اكون قد خالفت قانونا من قوانين القسم

لدي سؤال وهو كيف يمكنني ان اربط برنامجي بقاعدة بيانات sql علما انها بالسي بلس بلس وشكرا لكم سلفا

والسلام عليكم ورحمة الله تعالى و بركاته

تم تعديل هذه المشاركة بواسطة nizarnizario في 2 يوليو 2012 في 14:44

#2

السلام عليكم

مرحبا بك أخي نزار في منتديات الفريق العربي للبرمجة :)

أولا :

للإجابة على سؤالك بشكل دقيق لا بد من معرفة الــ IDE الذي تعمل عليه حاليا.

ثانيا :

هل سيعمل برنامجك كتطبيق ويب داخل صفحه الانترنت (Web Application) أم سيكون تطبيق منفصل (Desktop Application) ؟ فبرمجة الويب باستخدام أدوات ولغات أخرى أسهل بكثير من سي++. إذا اردت أن تكون القاعدة على الانترنت وتقوم بعمل تطبيق سطح مكتب يتصل بالقاعدة ويأخذ منها البيانات، فيمكن فعل ذلك في السي++ بغض النظر عن نوع القاعدة، ولكنني أفضل جعل التطبيق Web Application (واستخدم اي من لغات برمجة المواقع مثل php , Asp.NET , JSP).

عموما, إليك الخطوات العامة لعملية الربط :


  • قم بتحميل MySQL Connector/CPP
  • عند فك ضغط الملف ستحصل على مجلد يحتوي على مجلدين, الأول باسم include و يحتوي على الملفات الرأسية (Header files) أما الملف الثاني فيحتوي على مكتبات الربط الثابتة (Static library) بالإضافة إلى مكتبات الربط الديناميكية (Dynamic Link Library).
  • قم بإضافة جميع المكتبات إلى مشروعك, للأسف, الـــ GCC لا يدعم مكتبات lib لذا يمكنك :
    • استخدام CMake للربط بين المكتبات و المشروع.
    • الإستعانة بالأداة reimp لتحويل ملفات lib إلى a (الــ GCC يستخدم الإمتداد الأخير بدلا من الأول).

    [*]بعد نجاح عملية الربط يمكنك الإنتقال إلى المرحلة القادمة, و هي كتابة البرنامج المسؤول عن الإتصال بقاعدة البيانات. عملية الإتصال ستتم على النحو التالي :

    1. الدالة get_driver_instance تقوم بعمل تحميل ديناميكي (dynamic loading) للدرايفر.
    2. الدالة connect تقوم بإنشاء اتصال جديد, هذه الدالة تستقبل ثلاث وسائط : الأول هو الــ URL (اسم السرفر + رقم الــ Port), الوسيط الثاني هو اسم المستخدم و الوسيط الثالث هو كلمة المرور.
    3. الدالة setSchema تستقبل اسم قاعدة البيانات التي سيتم الإتصال بها.
    4. الفئة ResultSet تحتوي على نتيجة الإستعلام (SQL request).
    5. الدالة executeQuery تقوم بتنفيذ الــ SQL request.
    6. الدالة next تُعيد صفر عند انتهاء الــ SQL table التي طُبق عليها الإستعلام.
    7. أثناء عمل هذه الدوال قد نحصل على استثناء (exception) لذا يجب وضع الأوامر السابقة في try و إدراج معالجة الإستثناءات في الـ catch المرافق لها.
    8. الدالة getErrorCode تُعيد رقم الخطأ (من خلال رقم الخطأ يمكن التعرف على طبيعة الخطأ و معالجته)
    9. الدالة getSQLState تُعيد سلسلة حرفية تمثل حالة الإستعلام (XOPEN أو SQL99)
    10. و أخيرا يجب تحرير الذاكرة التي يُشير إليها مؤشر الفئة ResultSet (كما هو الحال مع كل من Statement و Connection).

و هذا مثال للإتصال بقاعدة بيانات MYSQL :

#include <cstdlib>
#include <iostream>

/*
  Include directly the different
  headers from cppconn/ and mysql_driver.h + mysql_util.h
  (and mysql_connection.h). This will reduce your build time!
*/
#include "mysql_connection.h"

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

using namespace std;

int main(void)
{
cout << endl;
cout << "Running 'SELECT 'Hello World!' »
   AS _message'..." << endl;

try {
  sql::Driver *driver;
  sql::Connection *con;
  sql::Statement *stmt;
  sql::ResultSet *res;

  /* Create a connection */
  driver = get_driver_instance();
  con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
  /* Connect to the MySQL test database */
  con->setSchema("test");

  stmt = con->createStatement();
  res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
  while (res->next()) {
    cout << "\t... MySQL replies: ";
    /* Access column data by alias or column name */
    cout << res->getString("_message") << endl;
    cout << "\t... MySQL says it again: ";
    /* Access column fata by numeric offset, 1 is the first column */
    cout << res->getString(1) << endl;
  }
  delete res;
  delete stmt;
  delete con;

} catch (sql::SQLException &e) {
  cout << "# ERR: SQLException in " << __FILE__;
  cout << "(" << __FUNCTION__ << ") on line " »
     << __LINE__ << endl;
  cout << "# ERR: " << e.what();
  cout << " (MySQL error code: " << e.getErrorCode();
  cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

cout << endl;

return EXIT_SUCCESS;
}

أرجو لك التوفيق.

3

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…