Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

Javaخطوات ربط البرنامج مع قواعد البيانات في جافا

  • مقدمة
  • تحديد الـ Driver المناسب لإجراء الإتصال مع قاعدة البيانات
  • بدء الإتصال مع قاعدة البيانات
  • تجهيز كائن لإرسال إستعلامات إلى قاعدة البيانات
  • تنفيذ إستعلامات و حفظ و عرض نتائجهم
  • إغلاق الإتصال مع قاعدة البيانات عند الإنتهاء
  • جميع الخطوات السابقة في مثال واحد

مقدمة

لربط البرنامج مع أي قاعدة بيانات مهما كان نوعها عليك إتباع الخطوات التالية:

  1. تحميل حزمة الـ jar الخاصة بقاعدة البيانات التي سنقوم بالتعامل معها.
  2. إستدعاء كلاسات الـ JDBC المصممة للتعامل مع قواعد البيانات, أي أن نفعل لهم import.
  3. تحديد الـ Driver المناسب لإجراء الإتصال مع قاعدة البيانات.
  4. بدء الإتصال مع قاعدة البيانات.
  5. تجهيز الإستعلامات التي سيتم إرسالها إلى قاعدة البيانات.
  6. تنفيذ الإستعلامات التي تم تجهيزها.
  7. إغلاق الإتصال مع قاعدة البيانات عند الإنتهاء.

تحديد الـ Driver المناسب لإجراء الإتصال مع قاعدة البيانات

لتحديد إسم الـ Driver الملائم للإتصال بقاعدة البيانات التي سيتم التعامل معها نستخدم الدالة الثابتة forName() الموجودة في كلاس إسمه Class.

مثال

في حال كنا سنربط البرنامج بقاعدة بيانات مبنية بنظام MYSQL نكتب التالي.

Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver");

بناء الدالة forName().

public static Class<?> forName(String className)
throws ClassNotFoundException
public static Class<?> forName(String className) throws ClassNotFoundException

الـ className هو نص يمثل إسم الكلاس ( أي الـ Driver ) الذي سيربط البرنامج بقاعدة البيانات.


القيمة التي ترجعها الدالة forName().

ترجع كائن نوعه Class يمثل إسم الكلاس ( أي الـ Driver ) الذي سيربط البرنامج بقاعدة البيانات.


الأخطاء التي قد تحدث عند إستدعاء الدالة forName().

  • LinkageError في حال عدم وجود توافق بين أكواد الكلاسات المستخدمة في عملية ربط البرنامج مع قواعد البيانات.
  • ExceptionInInitializerError في حال حدث خطأ عند خلق الكائن.
  • ClassNotFoundException في حال كان الكلاس الذي قمنا بتمريره غير موجود.

بدء الإتصال مع قاعدة البيانات

لبدء عملية الإتصال بقاعدة البيانات نستخدم الدالة الثابتة getConnection() الموجودة في الكلاس DriverManager, و التي ترجع كائن نوعه Connection يمثل الإتصال القائم بين البرنامج و قاعدة البيانات.

مثال

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/company","root","root");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/company","root","root");

شرح الكود

هنا إفترضنا أننا سنتصل بقاعدة بيانات:

  1. مبنية بنظام MYSQL و موجودة في نفس جهاز المستخدم.
  2. إسم المستخدم في قاعدة البيانات هو root.
  3. كلمة مرور المستخدم في قاعدة البيانات هي root.

ملاحظة: شرحنا الدالة getConnection() بتفصيل ضمن شرح الكلاس DriverManager.

تجهيز كائن لإرسال إستعلامات إلى قاعدة البيانات

حتى تستطيع إرسال إستعلامات إلى قاعدة البيانات عليك إنشاء كائن نوع Statement من كائن الـ Connection الذي قمت بإنشائه سابقاً بواسطة الدالة createStatement().

مثال

هنا قمنا بإنشاء كائن نوعه Statement من كائن نوعه Connection و قمنا بتخزينه في الكائن stmt.

Statement stmt = con.createStatement();
Statement stmt = con.createStatement();

تنفيذ إستعلامات و حفظ و عرض نتائجهم

لتنفيذ أي إستعلام على قاعدة البيانات, نقوم بإرسال نص الإستعلام بواسط الدالة executeQuery() على كائن الـ Statement الذي قمنا بإنشائه سابقاً.

الدالة executeQuery() ترجع نتيجة الإستعلام ككائن نوعه ResultSet.

مثال

هنا قمنا بإرسال إستعلام إلى قاعدة البيانات, لإرجاع كافة أسماء الموظفين الموجودة في الجدول Employees.

ResultSet rs = stmt.executeQuery("select name from Employees");
ResultSet rs = stmt.executeQuery("select name from Employees");

لعرض جميع الأسماء التي تم تخزينها في الكائن rs, نستخدم أي حلقة كالتالي.

while(rs.next()){
System.out.println( rs.getString("name") );
}
while(rs.next()){ System.out.println( rs.getString("name") ); }

إغلاق الإتصال مع قاعدة البيانات عند الإنتهاء

بعد الإنتهاء من التعامل مع قاعدة البيانات عليك إغلاق الإتصال معها بواسطة الدالة close() الموجودة في الإنترفيس Connection.

إذاً, لإغلاق الإتصال مع قاعدة البيانات نستدعي الدالة close() على كائن الـ Connection و التي تقوم بقطع الإتصال مع كائن الـ Statement و كائن الـ ResultSet بشكل تلقائي.

مثال

هنا قمنا بقطع الإتصال مع قاعدة البيانات.

con.close();
con.close();

جميع الخطوات السابقة في مثال واحد

في المثال التالي سنفترض أننا سنقوم بالإتصال بقاعدة بيانات إسمها school تمثل قاعدة بيانات لمدرسة, و مبنية بنظام MySQL.
بعدها سنقوم بطباعة أسماء الطلاب الموجودين فيها و المحفوظين في جدول إسمه students.

تذكر: قبل البدء بكتابة الكود, لا تنسى أن تقوم بتحميل مكتبة الـ jar الخاصة بقواعد بيانات MySQL.


مثال

Main.java
// 1) هنا قمنا بإستدعاء الكلاسات و الإنترفيسات التي سنستخدمها للتعامل مع قاعدة البيانات
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
try {
// 2) الذي سنعتمد عليه للوصول إلى قاعدة البيانات MYSQL Driver هنا قمنا بتحديد رابط الوصول لبرنامج الـ
Class.forName("com.mysql.jdbc.Driver");
// 3) و الذي سنستخدمه لتحديد المعلومات الأساسية التي نحتاجها للإتصال بقاعدة البيانات Connection هنا قمنا بإنشاء كائن من الكلاس
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root");
// 4) و الذي سنستخدمه لإرسال إستعلامات إلى قاعدة البيانات Statement هنا قمنا بتجهيز كائن نوعه
Statement stmt = con.createStatement();
// 5) rs هنا قمنا بإرسال إستعلام إلى قاعدة البيانات لجلب جميع الأسماء الموجودة في جدول الطلاب. بعدها قمنا بتخزين النتيجة في الكائن
ResultSet rs = stmt.executeQuery("select name from students");
// 6) ( ملاحظة: هنا كل سطر يحتوي على إسم واحد ) rs هنا أنشأنا حلقة تمر على جميع الأسطر التي تم تخزينها في الكائن
while(rs.next()) {
// rs هنا في كل دورة سيتم عرض إسم جديد من الأسماء الموجودة في الكائن
System.out.println(rs.getString("name"));
}
// 7) هنا قمنا بإغلاق الإتصال مع قاعدة البيانات
con.close();
}
catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
// 1) هنا قمنا بإستدعاء الكلاسات و الإنترفيسات التي سنستخدمها للتعامل مع قاعدة البيانات import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Main { public static void main(String[] args) { try { // 2) الذي سنعتمد عليه للوصول إلى قاعدة البيانات MYSQL Driver هنا قمنا بتحديد رابط الوصول لبرنامج الـ Class.forName("com.mysql.jdbc.Driver"); // 3) و الذي سنستخدمه لتحديد المعلومات الأساسية التي نحتاجها للإتصال بقاعدة البيانات Connection هنا قمنا بإنشاء كائن من الكلاس Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root"); // 4) و الذي سنستخدمه لإرسال إستعلامات إلى قاعدة البيانات Statement هنا قمنا بتجهيز كائن نوعه Statement stmt = con.createStatement(); // 5) rs هنا قمنا بإرسال إستعلام إلى قاعدة البيانات لجلب جميع الأسماء الموجودة في جدول الطلاب. بعدها قمنا بتخزين النتيجة في الكائن ResultSet rs = stmt.executeQuery("select name from students"); // 6) ( ملاحظة: هنا كل سطر يحتوي على إسم واحد ) rs هنا أنشأنا حلقة تمر على جميع الأسطر التي تم تخزينها في الكائن while(rs.next()) { // rs هنا في كل دورة سيتم عرض إسم جديد من الأسماء الموجودة في الكائن System.out.println(rs.getString("name")); } // 7) هنا قمنا بإغلاق الإتصال مع قاعدة البيانات con.close(); } catch(Exception e) { System.out.println(e.getMessage()); } } }

لو كانت قاعدة البيانات موجودة و قمنا بتشغيل البرنامج, سيظهر لنا جميع الأسماء الموجودة في الحقل name كالتالي.

Ahmad
Fouad
Said
Rola
Mohamad
Rim
Jana
Salem
Samir
Abdullah
...
Ahmad Fouad Said Rola Mohamad Rim Jana Salem Samir Abdullah ...

إذا قمت بتشغيل هذا البرنامج عندك سيظهر لك مشكلة سببها أن قاعدة البيانات school المذكورة في البرنامج غير موجودة عندك.
الهدف من هذا المثال كان تمرينك على إتباع الخطوات الصحيحة للتعامل مع قواعد البيانات.مع العلم أنه في حال كان عندك قاعدة بيانات يمكنك التجربة عليها و سيكون عليك تعديل أوامر sql الموضوعة في الكود فقط حتى تلائم قاعدة بياناتك, مثل إسم قاعدة البيانات, إسم المستخدم و كلمة مروره, إسم الحقل الذي ستقوم بعرض محتوياته إلخ..