الوحدة 7: الواجهات الرسومية وقواعد البيانات · الموضوع 16 من 17
الموضوع 16

ربط جافا بقاعدة بيانات MySQL على XAMPP

نحفظ بيانات البرنامج في قاعدة بيانات حقيقية على خادم XAMPP، ونضيف الطلاب ونعرضهم من جافا بخطوات ثابتة.

Java JDBC MySQL XAMPP Control PanelMySQL ●port 3306
بعد هذا الدرس ستستطيع أن:
  • تشرح مفاهيم قاعدة البيانات والجدول ولغة SQL و JDBC.
  • تشغّل MySQL على XAMPP، وتُنشئ قاعدة بيانات وجدولًا في phpMyAdmin.
  • تضيف مشغّل JDBC إلى مشروع NetBeans، وتتصل بقاعدة البيانات.
  • تضيف طالبًا وتقرأ بيانات الطلاب باستخدام PreparedStatement و ResultSet.
  • تربط زر الحفظ في واجهة رسومية بقاعدة البيانات.

١المفاهيم الأساسية

🗄 قاعدة البياناتمجموعة بيانات منظّمة محفوظة بشكل دائم.
📋 الجدولصفوف (سجلات) وأعمدة (حقول)، مثل جدول الطلاب.
💬 SQLلغة التخاطب مع قاعدة البيانات: SELECT و INSERT و UPDATE و DELETE.
🔌 JDBCواجهة جافا القياسية للاتصال بأي قاعدة بيانات (الحزمة java.sql).
Java AppبرنامجكJDBC APIjava.sqlConnector/Jالمشغّل (jar)MySQL / MariaDBXAMPP · 3306
برنامجك يتعامل مع واجهة JDBC القياسية فقط، والمشغّل يترجم الطلبات إلى لغة الخادم. لو غيّرت قاعدة البيانات تغيّر المشغّل فقط.

٢تجهيز XAMPP

لوحة XAMPP Control Panel بعد تشغيل Apache و MySQL
لوحة XAMPP Control Panel بعد تشغيل Apache و MySQL
الصفحة الرئيسية لـ phpMyAdmin
الصفحة الرئيسية لـ phpMyAdmin

إنشاء قاعدة البيانات والجدول

في phpMyAdmin افتح تبويب SQL، والصق الأوامر التالية، ثم اضغط Go:

🗄 SQL – phpMyAdmin
-- 1) إنشاء قاعدة البيانات بترميز يدعم العربيةCREATE DATABASE college CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE college; -- 2) إنشاء جدول الطلابCREATE TABLE students (    id    INT PRIMARY KEY,    name  VARCHAR(100) NOT NULL,    mark  DOUBLE); -- 3) بيانات تجريبيةINSERT INTO students (id, name, mark) VALUES (4321, 'Mohammed', 80), (4344, 'Turki', 50);
تبويب SQL في phpMyAdmin وفيه أوامر الإنشاء
تبويب SQL في phpMyAdmin وفيه أوامر الإنشاء
جدول students بعد الإنشاء وفيه البيانات التجريبية
جدول students بعد الإنشاء وفيه البيانات التجريبية

٣إضافة المشغّل إلى NetBeans

ملف المشغّل mysql-connector-j بعد التنزيل وفك الضغط
ملف المشغّل mysql-connector-j بعد التنزيل وفك الضغط
زر أيمن على Libraries‏ ← ‏Add JAR/Folder
زر أيمن على Libraries‏ ← ‏Add JAR/Folder
اختيار ملف jar ثم Open
اختيار ملف jar ثم Open
ملف المشغّل داخل Libraries في المشروع
ملف المشغّل داخل Libraries في المشروع

٤خطوات JDBC: الوصفة الثابتة

كل عملية على قاعدة البيانات تمرّ بالخطوات نفسها تقريبًا، وكل خطوة لها كلاس من الحزمة java.sql. احفظ هذه الوصفة وستكتب بها أي عملية:

الكلاسوظيفته
DriverManagerيفتح الاتصال بقاعدة البيانات
Connectionيمثّل الاتصال المفتوح
PreparedStatementيحمل أمر SQL ويملأ علامات ? بالقيم
ResultSetيحمل نتائج SELECT صفًّا صفًّا
SQLExceptionالاستثناء الذي يظهر عند أي خطأ في قاعدة البيانات

الإضافة INSERT

1Connectionالاتصال بقاعدة البيانات
2PreparedStatementتجهيز أمر INSERT
3setInt / setString / setDoubleتعبئة علامات ?
4executeUpdate()تنفيذ الأمر
5close()إغلاق الاتصال

العرض SELECT

1Connectionالاتصال بقاعدة البيانات
2PreparedStatementتجهيز أمر SELECT
3executeQuery() → ResultSetالتنفيذ واستلام النتائج
4while (rs.next())المرور على الصفوف وقراءتها
5close()إغلاق الاتصال

الفرق بين العمليتين في خطوة التنفيذ: الإضافة والتعديل والحذف تُنفَّذ بـ executeUpdate()، أما العرض فبـ executeQuery() الذي يعيد النتائج في ResultSet.

٥البرنامج: ثلاثة كلاسات

«uses»«uses»DBConnection- URL : String- USER : String- PASS : String+ getConnection() : ConnectionStudentDB+ insert(id, name, mark) : void+ printAll() : voidMain+ main(args) : void
🧩 ثلاثة كلاسات فقط: DBConnection للاتصال، و StudentDB لأوامر الإضافة والعرض، و Main يستدعيهما.
+ public- private# protected~ defaultمسطّر: staticمائل: abstract

١) كلاس الاتصال DBConnection

يُكتب مرة واحدة، وفيه بيانات الاتصال:

DBConnection.java
package college; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException; public class DBConnection {    private static final String URL  = "jdbc:mysql://localhost:3306/college";    private static final String USER = "root";    private static final String PASS = "";      // XAMPP: بلا كلمة مرور افتراضيًّا     public static Connection getConnection() throws SQLException {        return DriverManager.getConnection(URL, USER, PASS);    }}
جزء الرابطمعناه
jdbc:mysql://نوع قاعدة البيانات
localhostالخادم على جهازك نفسه
3306المنفذ الافتراضي لـ MySQL
collegeاسم قاعدة البيانات

٢) كلاس العمليات StudentDB

دالتان، وكل سطر مرقّم برقم خطوته في الوصفة أعلاه:

StudentDB.java
package college; import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException; public class StudentDB {     // إضافة طالب: INSERT    public static void insert(int id, String name, double mark) {        String sql = "INSERT INTO students (id, name, mark) VALUES (?, ?, ?)";        try {            Connection con = DBConnection.getConnection();      // 1) الاتصال            PreparedStatement ps = con.prepareStatement(sql);   // 2) تجهيز الأمر            ps.setInt(1, id);                                   // 3) تعبئة القيم            ps.setString(2, name);            ps.setDouble(3, mark);            ps.executeUpdate();                                 // 4) التنفيذ            con.close();                                        // 5) الإغلاق            System.out.println("تمت إضافة الطالب " + name);        } catch (SQLException e) {            System.out.println("خطأ: " + e.getMessage());        }    }     // عرض الطلاب: SELECT    public static void printAll() {        String sql = "SELECT id, name, mark FROM students";        try {            Connection con = DBConnection.getConnection();      // 1) الاتصال            PreparedStatement ps = con.prepareStatement(sql);   // 2) تجهيز الأمر            ResultSet rs = ps.executeQuery();                   // 3) التنفيذ واستلام النتائج            while (rs.next()) {                                 // 4) المرور على الصفوف                System.out.println(rs.getInt("id") + " | " + rs.getString("name")                        + " | " + rs.getDouble("mark"));            }            con.close();                                        // 5) الإغلاق        } catch (SQLException e) {            System.out.println("خطأ: " + e.getMessage());        }    }}

٣) البرنامج الرئيسي Main

Main.java
package college; public class Main {    public static void main(String[] args) {        StudentDB.insert(4355, "Fahad", 92);   // إضافة طالب        StudentDB.printAll();                  // عرض جميع الطلاب    }}
Output – college (run)×
run:
تمت إضافة الطالب Fahad
4321 | Mohammed | 80.0
4344 | Turki | 50.0
4355 | Fahad | 92.0
BUILD SUCCESSFUL (total time: 0 seconds)

يتطلب تشغيل XAMPP على جهازك، لذلك لا يعمل على OneCompiler. وبعد التشغيل يظهر الطالب الجديد في الجدول:

الجدول في phpMyAdmin بعد إضافة الطالب Fahad
الجدول في phpMyAdmin بعد إضافة الطالب Fahad

٦ربط الواجهة بقاعدة البيانات

صمّم بالسحب والإفلات (كما في درس الواجهات) نافذة فيها ثلاثة حقول وزر Save:

نافذة إدخال بيانات الطالب في وضع التصميم
نافذة إدخال بيانات الطالب في وضع التصميم

ثم انقر على الزر نقرًا مزدوجًا واكتب: اقرأ الحقول الثلاثة، ثم استدعِ StudentDB.insert:

StudentForm.java
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {    int id = Integer.parseInt(jTextField1.getText());    String name = jTextField2.getText();    double mark = Double.parseDouble(jTextField3.getText());     StudentDB.insert(id, name, mark);    JOptionPane.showMessageDialog(this, "تم الحفظ");}
تشغيل النافذة: إدخال الطالب Rami ثم رسالة «تم الحفظ»
تشغيل النافذة: إدخال الطالب Rami ثم رسالة «تم الحفظ»
الطالب Rami في الجدول بعد الحفظ من النافذة
الطالب Rami في الجدول بعد الحفظ من النافذة

٧أخطاء شائعة وحلولها

رسالة الخطأالسبب الأرجحالحل
Communications link failureخادم MySQL لا يعملشغّل MySQL من لوحة XAMPP
Access denied for user 'root'كلمة المرور خاطئةطابق PASS مع كلمة مرور root (فارغة افتراضيًّا)
Unknown database 'college'لم تُنشأ قاعدة البياناتنفّذ أوامر SQL في phpMyAdmin
No suitable driver foundملف المشغّل غير مضاف للمشروعأضف ملف jar إلى Libraries
Table 'college.students' doesn't existاسم الجدول خطأ أو لم يُنشأراجع أمر CREATE TABLE

توقّع وتحقّق

أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.

المنفذ الافتراضي لـ MySQL في XAMPP:

في عملية العرض SELECT، ما الخطوة التي تأتي بعد تجهيز الأمر PreparedStatement؟

executeQuery تنفّذ SELECT وتعيد النتائج في ResultSet، ثم نمرّ عليها بـ while (rs.next()).

لإضافة طالب إلى الجدول نستخدم الأمر:

ظهر الخطأ Communications link failure. الأرجح:

الخلاصة

انتقل إلى تقييم الدرسأسئلة التقييم، وأكمل الفراغات.ابدأ التقييم ←
أنهيت المقرر كاملًا!اختبر نفسك في الاختبار النهائي الشامل.ابدأ الاختبار ←