أصبحت صفحات خادم Java (JSP)، التي تسهل التطوير السريع للبرامج من جانب الخادم، أداة شائعة على نطاق واسع. على الرغم من أن الجانب الممل لا يزال موجودًا، بغض النظر عن عدد أوجه القصور التي يحتوي عليها، إلا أن JSP لديه الكثير ليقدمه لمبرمجي الويب، خاصة في عمليات إدخال وإخراج قواعد البيانات ومعالجة البيانات.
لا يتطلب الوصول إلى قاعدة البيانات عبر JSP الكثير من التوجيه. المشكلة هي كيفية جعل المطورين يقبلون أن الوصول إلى قاعدة البيانات من برامج الويب أكثر جاذبية من الوصول إلى قاعدة البيانات من أنظمة OLAP المحلية التقليدية، وجعلهم يدركون أن أساليب الوصول إلى البيانات النظيفة والموجزة هي المفتاح. في هذه المرحلة، يمكن لـ JSP حل المشكلة بشكل جيد جدًا.
ماذا يمكنك أن تفعل؟
إذا كنت تكتب برنامج ويب يحتوي على حجم بيانات كبير وكثافة بيانات عالية، فما هي المتطلبات التي يجب أن تتوفر في الوصول إلى قاعدة البيانات لديك؟ إذا كنت تستخدم JSP، فسيتعين عليك التعامل مع الكثير من البيانات من جانب الخادم. قد يتطلب البرنامج كميات كبيرة من البيانات، أو العديد من المستخدمين، أو مزيجًا من الاثنين. تشمل المجالات المحتملة التي قد تفكر فيها أيضًا ما يلي: تحسين الأداء، وإمكانية الاكتشاف، وتأثير الاستعلامات المتعددة لكل مستخدم، وتعقيد الاستعلام، وتحويل النوع عالي المستوى عندما تتعامل جلسة واحدة مع كميات كبيرة من البيانات.
وهذا ينطوي على معالجة واسعة النطاق. ومع ذلك، يمكن لـ JSP مساعدتك في التعامل معها بشكل جيد لأنها متوافقة جيدًا مع Java Database Connectivity API (JDBC). يمكنك تضمين JDBC في كود JSP، ويمكن لـ JDBC تمرير البيانات لتنفيذ أوامر تشبه قاعدة البيانات، طالما أنك تستخدم برنامج تشغيل JDBC بشكل صحيح.
يبدأ
فيما يلي نظام تنفيذ برنامج JSP عام ومجرد. نمط تصميم JSP المفضل هو Model-View-Controller (MVCModel-View-Controller)، وهو شكل مختلف من النظام التقليدي ثلاثي الطبقات ليناسب برامج الخادم بشكل أفضل. في نمط تصميم MVC لـ JSP، يشير النموذج إلى منطق البرنامج وبياناته، ويشير العرض إلى العرض، ويشير جهاز التحكم إلى معالجة الطلب.
عندما تقوم بتصميم برنامج JSP، فمن الأفضل إنشاء صفحة تمثل الخطوة الأولى بين تفاعل العميل والخادم. على سبيل المثال، في برنامج نموذجي، قد تكون هناك صفحات لكل خطوة محددة في تبادل البيانات: صفحة إدخال البيانات، وصفحة طلب التحقق من الصحة، وصفحة استجابة قاعدة البيانات، والصفحات الفرعية لهذه الصفحات (صفحة سجل التغيير، وصفحة الحذف المسجلة الصفحات، الخ).
يمكنك تضمين JDBC في كل صفحة لإكمال عمليات قاعدة البيانات المطلوبة. ومع ذلك، فإن هذه العملية تحمل أيضًا مخاطرة كبيرة، لأن البرنامج بأكمله يتم خلطه عن طريق خلط JSP وJDBC-JDBC استنادًا إلى SQL. هذا يعني أن SQL مغلف في JDBC، وأن JDBC مغلف أيضًا في JSP، وهذا يكفي ليجعلك تشعر بالدوار. إذا اخترت هذا الأسلوب، فستحصل على الوظيفة التي تريدها، ولكن كن حذرًا للغاية للتأكد من أن العلاقة بين منطق البرنامج ورمز الوصول إلى قاعدة البيانات واضحة جدًا.
مضمنJDBC
لا تتصل JDBC API مباشرة بقاعدة البيانات. يتم الاتصال الفعلي بواسطة برامج التشغيل، والتي يمكنك تنزيلها من موقع البائع. بالإضافة إلى ذلك، هناك أربعة أنواع من برامج تشغيل JDBC إذا قررت استخدام JDBC، فأنت بحاجة إلى اختيار النوع الذي يناسب احتياجاتك بشكل صحيح. ستستخدم فئة DriverManager للتعامل مع الاتصالات المستندة إلى برنامج التشغيل.
يمكنك استخدام طريقة DriverManager التي تسمى getConnection لتأسيس اتصال قاعدة البيانات الخاصة بك. يمكنك أيضًا تحديد قاعدة البيانات باستخدام معلمات URL الخاصة بها:
public static Connection getConnection(jdbc:odbc:nameOfDatabase)
الآن، أخبر DriverManager عن برنامج التشغيل (يجب أن يكون في مسار الفصل الخاص بك):
Class.forName("sun.jdbc.odbc.nameOfJDBCDriver" ") ؛
لقد قمت بتوصيل قاعدة البيانات ببرنامج JSP، لكن لا يزال يتعذر عليك تنفيذ أمر قاعدة البيانات. لحل هذه المشكلة، يمكنك إنشاء العبارة في كود JSP لتأسيس أمر قاعدة البيانات مثل هذا:
البيان العام createStatement(intresultSetType, intresultSetConcurrency)
تسمح لك المعلمات بالتحكم في النتائج التي تم الحصول عليها من استعلام قاعدة البيانات. عند استخدام المعلمة الأولى، يمكنك رؤية النتائج في البرنامج؛ وعند استخدام المعلمة الثانية، يمكنك تحديث القيمة من خلال الاستعلام (هذه ميزة رائعة تستحق المزيد من المناقشة في مقال مستقبلي).
يوضح الجدول (أ) مدى تعقيد تعداد الطريقتين التاليتين.
البيانات هي أوامر SQL. PreparedStatement عبارة عن عبارة SQL، ويمكنك التحكم في عملية البرنامج من خلال معلماته. يتم استخدام CallableStatement للوصول إلى إجراءات SQL المخزنة. هل بدأت تدرك أنه إذا لم تشاهد هذه التعليمات، فهل تجد هذه العبارات معقدة؟ يرجى ملاحظة أنه من خلال استدعاء طريقة التراجع، يمكنك التراجع عن عملية المعاملة.
إذا كنت تريد استخدام جميع أساليب الوصول إلى قاعدة البيانات هذه، فإن الشيء الوحيد الذي تفتقده هو:
ResultSetexecuteQuery(string sqlQuery)
(يمكنك استخدام ExecuterQuery لإكمال العملية المذكورة أعلاه. ويمكنك أيضًا استخدام ExecuteUpdate لإكمال التحديثات والإدراج والحذف). تتيح لك واجهة الإقرار المذكورة أعلاه استخدام عدد من الطرق لتنفيذ إقرارات SQL. كل ما تفعله ResultSet هو الوصول إلى البيانات التي تم الحصول عليها من الاستعلام، بحيث يمكنك استخدام هذه البيانات في برنامج JSP الخاص بك.
من خلال تقسيم برامج JSP إلى صفحات مفردة واضحة وظيفيًا وإجراء عملية قاعدة بيانات واحدة في أي صفحة معينة، يمكنك تبسيط عمليات قاعدة البيانات الخاصة بك بشكل كبير وإنشاء صفحات يمكن استخدامها لتطوير البرنامج في المستقبل حتى لو قمت بتضمين SQL في JDBC على هذه الصفحات .
ولكن هناك المزيد الذي يمكنك القيام به لجعل الوصول إلى قاعدة بيانات JSP الخاصة بك أكثر نظافة وأسهل في الصيانة. يعد تضمين JDBC في كود JSP والتواصل مع قاعدة البيانات عن طريق إرسال أوامر SQL عملية جيدة. ومع ذلك، فإنه يتطلب بناء برنامج لأوامر SQL من خلال الواجهة دون زيادة تعقيد التعليمات البرمجية. عندما تحتاج معالجة SQL الخاصة بك إلى مزيد من المرونة، يمكنك أيضًا فصل رمز واجهة قاعدة البيانات لديك لتنظيف برامج JSP الخاصة بك. وفي المقالة التالية سأخبرك بكيفية تنفيذ هذه العمليات.