ربط جافا بقاعدة بيانات MySQL على XAMPP
نحفظ بيانات البرنامج في قاعدة بيانات حقيقية على خادم XAMPP، ونضيف الطلاب ونعرضهم من جافا بخطوات ثابتة.
- تشرح مفاهيم قاعدة البيانات والجدول ولغة SQL و JDBC.
- تشغّل MySQL على XAMPP، وتُنشئ قاعدة بيانات وجدولًا في phpMyAdmin.
- تضيف مشغّل JDBC إلى مشروع NetBeans، وتتصل بقاعدة البيانات.
- تضيف طالبًا وتقرأ بيانات الطلاب باستخدام PreparedStatement و ResultSet.
- تربط زر الحفظ في واجهة رسومية بقاعدة البيانات.
١المفاهيم الأساسية
٢تجهيز XAMPP
- ثبّت XAMPP، وافتح XAMPP Control Panel.
- اضغط Start بجانب Apache (لازم لـ phpMyAdmin) وMySQL؛ يتحوّل لونهما إلى الأخضر ويظهر المنفذ 3306.
- افتح المتصفح على http://localhost/phpmyadmin.


إنشاء قاعدة البيانات والجدول
في phpMyAdmin افتح تبويب SQL، والصق الأوامر التالية، ثم اضغط Go:
-- 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);


٣إضافة المشغّل إلى NetBeans
- نزّل MySQL Connector/J من موقع MySQL الرسمي (اختر Platform Independent)، وفُكّ الضغط لتجد ملفًا اسمه مثل
mysql-connector-j-x.x.x.jar. - في NetBeans: زر أيمن على Libraries في المشروع ← Add JAR/Folder ← اختر ملف jar.
- البديل: مشغّل MariaDB Connector/J، ويعمل أيضًا مع
jdbc:mysql://.




٤خطوات JDBC: الوصفة الثابتة
كل عملية على قاعدة البيانات تمرّ بالخطوات نفسها تقريبًا، وكل خطوة لها كلاس من الحزمة java.sql. احفظ هذه الوصفة وستكتب بها أي عملية:
| الكلاس | وظيفته |
|---|---|
DriverManager | يفتح الاتصال بقاعدة البيانات |
Connection | يمثّل الاتصال المفتوح |
PreparedStatement | يحمل أمر SQL ويملأ علامات ? بالقيم |
ResultSet | يحمل نتائج SELECT صفًّا صفًّا |
SQLException | الاستثناء الذي يظهر عند أي خطأ في قاعدة البيانات |
الإضافة INSERT
العرض SELECT
الفرق بين العمليتين في خطوة التنفيذ: الإضافة والتعديل والحذف تُنفَّذ بـ executeUpdate()، أما العرض فبـ executeQuery() الذي يعيد النتائج في ResultSet.
٥البرنامج: ثلاثة كلاسات
١) كلاس الاتصال DBConnection
يُكتب مرة واحدة، وفيه بيانات الاتصال:
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
دالتان، وكل سطر مرقّم برقم خطوته في الوصفة أعلاه:
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()); } }}
- علامات ?: أماكن فارغة في أمر SQL، نملؤها بالترتيب: الأولى رقم 1، والثانية 2، وهكذا.
- rs.next(): ينتقل إلى الصف التالي، ويعيد false حين تنتهي الصفوف فتتوقف الحلقة.
- rs.getInt("id"): يقرأ قيمة العمود id من الصف الحالي، ومثلها getString و getDouble.
- try و catch: لأن عمليات قاعدة البيانات قد تطلق SQLException، وهو استثناء Checked.
٣) البرنامج الرئيسي Main
package college; public class Main { public static void main(String[] args) { StudentDB.insert(4355, "Fahad", 92); // إضافة طالب StudentDB.printAll(); // عرض جميع الطلاب }}
يتطلب تشغيل XAMPP على جهازك، لذلك لا يعمل على OneCompiler. وبعد التشغيل يظهر الطالب الجديد في الجدول:

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

ثم انقر على الزر نقرًا مزدوجًا واكتب: اقرأ الحقول الثلاثة، ثم استدعِ StudentDB.insert:
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, "تم الحفظ");}


٧أخطاء شائعة وحلولها
| رسالة الخطأ | السبب الأرجح | الحل |
|---|---|---|
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؟
لإضافة طالب إلى الجدول نستخدم الأمر:
ظهر الخطأ Communications link failure. الأرجح:
الخلاصة
- JDBC واجهة جافا للاتصال بقواعد البيانات، ويلزمها مشغّل jar يُضاف إلى Libraries.
- XAMPP: شغّل MySQL (فعليًّا MariaDB) وأنشئ القاعدة في phpMyAdmin؛ المستخدم root بلا كلمة مرور.
- الرابط: jdbc:mysql://localhost:3306/اسم_القاعدة.
- INSERT للإضافة و SELECT للقراءة عبر PreparedStatement و ResultSet.
- الوصفة: اتصال، ثم تجهيز الأمر، ثم تعبئة القيم، ثم التنفيذ، ثم الإغلاق؛ و SQLException استثناء Checked.