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

فيديو- كيفية استخدام قاعدة بيانات apache derby في برنامج جافا

بدأه shalkam في 28 فبراير 2011 · 8 رد · 1,950 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم,

أول شيء ذو قيمة احس انه انا قدرت اعمله في برنامج جافا و حبيت اشاركم به

أول حاجة احب اني اوضح اني لسة مبتدئ في الجافا و انا قادم من php الى الجافا لهذا لا يزال يوجد الكثير لاتعلمه

و اذا كان في اي ملاحظات على الشرح رجاء القيام بتوضيحه

أول شيئ في الشرح الفيديو

رابط الفيديو على اليوتيوب :

ثاني شيئ الملفات و الأكواد المستخدمة

1- ملف derby.jar الذي سيتم اضافته الى مكتبة البرنامج : http://www.mediafire.com/?kl8oz6aiinse69w

2- كود ملف البرنامج الذي سيتم استخدامه لانشاء قاعدة البيانات

import java.io.File;
import java.sql.*;

/**
 *
 * @author shalkam
 */
public class Main {

    private String absPath;

    /**
     * the constructor sets the abspPath value
     */
    public Main() {
        String path = new File(getClass().getResource("").getPath()).getParentFile().getParent();
        absPath = path.substring(5);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Main funcs = new Main();
        funcs.functions();
    }

    private void functions() {
        try {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        } catch (ClassNotFoundException e) {
            System.out.println(e);
        }
        try {
            Statement stat;
            Connection m_connexion = DriverManager.getConnection("jdbc:derby:" + absPath + "/data;create=true");
            stat = m_connexion.createStatement();
            stat.execute("CREATE TABLE APP.MYTABLE ( Age int, Name varchar(255) )");
        } catch (SQLException e) {
            System.err.println(e);
        }
    }

2- كود البرنامج لتوضيح قاعدة البيانات خلال عملها

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author shalkam
 */
public class Main {

    private String absPath;

    /**
     * the constructor sets the abspPath value
     */
    public Main() {
        String path = new File(getClass().getResource("").getPath()).getParentFile().getParent();
        absPath = path.substring(5);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Main funcs = new Main();
        funcs.functions();
    }

    private void functions() {
        JButton button = new JButton("add row");
        ActionListener action = new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    DatabaseMetaData metas;
                    ResultSet tables;
                    final Statement stat;
                    Connection m_connexion = DriverManager.getConnection("jdbc:derby:" + absPath + "/data;");
                    metas = m_connexion.getMetaData();
                    stat = m_connexion.createStatement();
                    stat.execute("insert into APP.MYTABLE values (25, 'SHALKAM')");
                } catch (SQLException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        };
        button.addActionListener(action);
        JButton button2 = new JButton("reset");
        ActionListener action2 = new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    DatabaseMetaData metas;
                    ResultSet tables;
                    final Statement stat;
                    Connection m_connexion = DriverManager.getConnection("jdbc:derby:" + absPath + "/data;");
                    metas = m_connexion.getMetaData();
                    stat = m_connexion.createStatement();
                    stat.execute("DROP TABLE APP.MYTABLE");
                    stat.execute("CREATE TABLE APP.MYTABLE ( Age int, Name varchar(255) )");
                } catch (SQLException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        };
        button2.addActionListener(action2);
        try {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        } catch (ClassNotFoundException e) {
            System.out.println(e);
        }
        String data[][] = {};
        String col[] = {"Name", "code"};
        DefaultTableModel model = new DefaultTableModel(data, col);

        try {
            Statement stat;
            Connection m_connexion = DriverManager.getConnection("jdbc:derby:" + absPath + "/data;");
            stat = m_connexion.createStatement();
            //stat.execute("CREATE TABLE APP.MYTABLE ( Age int, Name varchar(255) )");
            ResultSet rs = stat.executeQuery("SELECT * FROM APP.MYTABLE");
            JFrame frame = new JFrame("Inserting rows in the table!");
            JPanel panel = new JPanel();
            JTable table = new JTable(model);
            panel.add(table);
            panel.add(button);
            panel.add(button2);
            frame.add(panel);
            frame.setSize(300, 300);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            model.insertRow(table.getRowCount(), col);
            while (rs.next()) {
                String s = rs.getString("Name");
                float n = rs.getFloat("Age");
                model.insertRow(table.getRowCount(), new Object[]{s, n});
            }
        } catch (SQLException e) {
            System.err.println(e);
        }
    }
}

تحياتي,

مصطفى

3
#2

جميل اخى الكريم

لكن ظهر لى هذا الخطأ

java.sql.SQLException: Database 'tBeansProjects\testAnyApp5\build/data' not found.

مما يدل على عدم وجود قاعده البيانات

Software Developer
Mahmoudkelany.com


 

#3

اظن انه حضرتك لم تشاهد الفيديو بدقة

حيث انه في البداية تم برمجة برنامج لانشاء قاعدة البيانات التي سيتم العمل عليها

و فيه ايضا انشاء الجدول الذي سيتم العمل عليه

ثم بعد ذلك تمت صياغته في صورة ملف .jar و تم تشغيل هذا الملف فتم انشاء قاعدة البيانات

ثم تم نسخ مجلد قاعدة البيانات الى مسار ملف ال jar الجديد الذي تم عمله في نهاية المطاف

و شيئ ايضا قد لاحظته و اعتقد ان هذا هو سبب الخظأ

اذا لاحظت الخظأ الذي ظهر لك

java.sql.SQLException: Database 'tBeansProjects\testAnyApp5\build/data' not found.

تلاحظ ان الفاصل ان الفاصل بين كلمة "build" و كلمة "data" بالشكل التالى "/" و ليس "\" كما باقى الفواصل

حيث ان اﻷول هو المعتمد في انظمة لينكس و الثاني في ويندوز

هنا حبيت استفيد من خبرتك اني اسأل : كيف يتم جعل هذا الفاصل في صورة متغير يتم تحديده حسب نوع نظام التشغيل ؟

اخر حاجة احب أوضحها انه انا حاولت اني اعمل run للبرنامح من خلال ال netbeans قبل ان أعمل build للمشروع و حدث خظأ اثناء انشاء قاعدة البيانات

و لم يتم الانشاء الا بعد بناء المشروع في صورة ملف jar و تشغيله

و اذا ثبت أي اخظاء في الفيديو لا مانع من اعادة عمله مرة أخري لأني لست بخبير في الجافا

#4
shalkam كتب:

اظن انه حضرتك لم تشاهد الفيديو بدقة

لالالا انا شوفته

لكن حضرتك عندما شرحت , بدات بالتشغيل على طول واقتبست كود

وشرحته لكن مش عملت من الاول

حيث انه في البداية تم برمجة برنامج لانشاء قاعدة البيانات التي سيتم العمل عليها

و فيه ايضا انشاء الجدول الذي سيتم العمل عليه

ثم بعد ذلك تمت صياغته في صورة ملف .jar و تم تشغيل هذا الملف فتم انشاء قاعدة البيانات

ثم تم نسخ مجلد قاعدة البيانات الى مسار ملف ال jar الجديد الذي تم عمله في نهاية المطاف

انا فاهم كلامك لكن , انت لم تقوم بشرح الشىء المهم وهو عمليه الانشاء

و شيئ ايضا قد لاحظته و اعتقد ان هذا هو سبب الخظأ

اذا لاحظت الخظأ الذي ظهر لك

java.sql.SQLException: Database 'tBeansProjects\testAnyApp5\build/data' not found.

على فكرا الخطا مش من عندى

هاقولك ليه

String path = new File(getClass().getResource("").getPath()).getParentFile().getParent();
    	absPath = path.substring(5);

الكود على حسب فهمى ليه انه بتحصل مسار البرنامج اللى انت فيه لكى تقوم باضافه المكتبه هنا

لكن هذا خطأ

الصح انك تستخدمها كدا

System.getProperty("user.dir")

هتحصل من ذلك الكود على مسار المجلد الذى انت قومت بكتابه هذا الكود للحصول عليه , لكنه احدث خطأ لدى

فبالتالى هذا الكود معتمد فقط على جهازك فقط

تلاحظ ان الفاصل ان الفاصل بين كلمة "build" و كلمة "data" بالشكل التالى "/" و ليس "\" كما باقى الفواصل

المشكله مش فيها البرنامج بيتجاهلها

حيث ان اﻷول هو المعتمد في انظمة لينكس و الثاني في ويندوز

انا فاهم ذلك

هنا حبيت استفيد من خبرتك اني اسأل : كيف يتم جعل هذا الفاصل في صورة متغير يتم تحديده حسب نوع نظام التشغيل ؟

System.getProperty("file.separator")

اخر حاجة احب أوضحها انه انا حاولت اني اعمل run للبرنامح من خلال ال netbeans قبل ان أعمل build للمشروع و حدث خظأ اثناء انشاء قاعدة البيانات

و لم يتم الانشاء الا بعد بناء المشروع في صورة ملف jar و تشغيله

المشكله مش فى الجار او النت بينز المشكله ان البرنامج بيعتمد على جهازك فى المسارات مثلا

لانى لم اتعامل مع جميع الكود لان تقريبا هو دا السبب الاساسى

و اذا ثبت أي اخظاء في الفيديو لا مانع من اعادة عمله مرة أخري لأني لست بخبير في الجافا

بالنسبه لملف الـ derby.jar هتلاقيه موجود لديك فى مسار تسطيب ملفات النظام

فى مجلد Sun تجد فيها مجلد اخر اسمه JavaDB وبداخله مجلد lib ستجد فيه جميع ملفات الـ derby

بالتوفيق

Software Developer
Mahmoudkelany.com


 

#5

اقولك انا ايه اللى كان الخطا

اول حاجه المسار الذى وضحته لك فى الاول

ثانى حاجه انك فى الكود

لم تقم اصلا بانشاء قاعده البيانات فهو كل شويه يطلع خطأ يقول انه لم يجد هذا الملف data

هتعملها انت اضافه صغيره create=true اى عندما لا يجدها يقوم بالانشاء

"jdbc:derby:" + absPath + ";create=true"

وطبعا بعدها هتحتاج لعمل جدول البيانات

بس دى الاخطاء

انا قومت بتعديل البرنامج خالص

وتعديل الاخطاء وتقسيم البرنامج لدوال لـ

اولا لتنظيم العمل

ثانيا لتفادى تكرار الاكواد (مثلا كود الاتصال بقاعده البيانات تكرره فى عمليه الاضافه و الحذف و احضار البيانات )

ثالثا جعل الجدول دينماك ( طريقه بسيطه كدا , ولكن لها طرق افضل من ذلك )

post-217802-017064300 1298947975_thumb.p

الكود المعدل وهو يعمل على اى جهاز باذن الله

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author shalkam
 */
public class Main {

	private String dbPath;
	private Connection connection = null;
	private JButton addButton;
	private JButton restButton;
	private DefaultTableModel model;
	private JTable table;
	private String data[][];

	public static void main(String[] args) {
    	new Main();
	}

	public Main() {
    	dbPath = System.getProperty("user.dir")
            	+ System.getProperty("file.separator") + "data";
    	File f = new File(dbPath);

    	if (!f.exists()) {
        	creatDb();
    	}
    	functions();
    	creatGUI();
    	loadDb();
	}

	private Connection getConnection() throws Exception {
    	if (connection == null) {
        	Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        	connection = DriverManager.getConnection("jdbc:derby:" + dbPath + ";create=true");
    	}
    	return connection;
	}

	private void creatDb() {
    	try {
        	Statement stat;
        	stat = getConnection().createStatement();
        	stat.execute("CREATE TABLE APP.MYTABLE ( Age int, Name varchar(255) )");
    	} catch (Exception ex) {
        	ex.printStackTrace();
    	}
	}

	private void functions() {
    	addButton = new JButton("add row");
    	ActionListener action = new ActionListener() {

        	public void actionPerformed(ActionEvent e) {
            	try {
                	Statement stat;
                	stat = getConnection().createStatement();
                	stat.execute("insert into APP.MYTABLE values (25, 'SHALKAM')");
                	loadDb();
            	} catch (Exception ex) {
                	ex.printStackTrace();
            	}
        	}
    	};
    	addButton.addActionListener(action);
    	//////////////////
    	restButton = new JButton("reset");
    	ActionListener action2 = new ActionListener() {

        	public void actionPerformed(ActionEvent e) {
            	try {
                	Statement stat;
                	stat = getConnection().createStatement();
                	stat.execute("DELETE FROM APP.MYTABLE");
                	loadDb();
            	} catch (Exception ex) {
                	ex.printStackTrace();
            	}
        	}
    	};
    	restButton.addActionListener(action2);
	}

	private void loadDb() {
    	try {
        	Statement stat;
        	stat = getConnection().createStatement();
        	ResultSet rs = stat.executeQuery("SELECT * FROM APP.MYTABLE");
        	ArrayList<String[]> list = new ArrayList<String[]>();
        	while (rs.next()) {
            	String s = rs.getString("Name");
            	float n = rs.getFloat("Age");
            	list.add(new String[]{s, n + ""});
        	}
        	data = new String[list.size()][2];
        	model.setDataVector(list.toArray(data), new Object[]{"Name", "code"});
    	} catch (Exception e) {
        	e.printStackTrace();
    	}
	}

	private void creatGUI() {
    	JFrame frame = new JFrame("Inserting rows in the table!");
    	JPanel panel = new JPanel(new GridLayout(1, 2));
    	model = new DefaultTableModel();
    	table = new JTable(model);
    	panel.add(addButton);
    	panel.add(restButton);
    	frame.add(table, BorderLayout.CENTER);
    	frame.add(panel, BorderLayout.NORTH);
    	frame.setSize(400, 300);
    	frame.setVisible(true);
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

بالتوفيق

المرفقات
Untitled.png

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 1 مارس 2011 في 05:53

Software Developer
Mahmoudkelany.com


 

#6

شكرا لك اخى مصطفى على روحك الطيبة

مشروع جميل

ومرحبا بك فى منتدى اللغة الرائعة جافا وان احتجت اى مساعدة

ستجدنا بجانبك

موفق اخى مصطفى


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#7

الف شكر يا استاذ محمد و ان شاء الله فيه اسئلة كتيرة

و بالنسبة للكود اللى عمله استاذ محمود

احب اوضح حاجة اولا

الكود

System.getProperty("user.dir")

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

String path = new File(getClass().getResource("").getPath()).getParentFile().getParent();
dbPath = path.substring(5) + System.getProperty("file.separator") + "data";

لا يعمل الا على ملفات ال jar و السبب انه انا عامل كود بياكل اول خمس حروف في حالة ملف الجار بتكون ":file" لكن في حالة ملف .class فبياكل اول خمس حروف من المسار نفسه مما يسبب الخلل

فعملت انا كود غير الاثنين عشان يشتغل على اللينكس و ايضا الملفات التي لها امتداد .class

String path = new File(getClass().getResource("").getPath()).getParentFile().getParent();
        String det = path.substring(0, 5);
        if (det.equals("file:")) {
            dbPath = path.substring(5) + System.getProperty("file.separator") + "data";
        } else {
            dbPath = path + System.getProperty("file.separator") + "data";
        }

كنت سافوم بتعديل الموضوع الاصلي لتغيير الاكواد لكن لسبب ما غير مسموح لي بالتعديل

الكود الجديد

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package derby_db;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author shalkam
 */
public class Main {

    private String dbPath;
    private Connection connection = null;
    private JButton addButton;
    private JButton restButton;
    private DefaultTableModel model;
    private JTable table;
    private String data[][];

    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        String path = new File(getClass().getResource("").getPath()).getParentFile().getParent();
        String det = path.substring(0, 5);
        if (det.equals("file:")) {
            dbPath = path.substring(5) + System.getProperty("file.separator") + "data";
        } else {
            dbPath = path + System.getProperty("file.separator") + "data";
        }
        File f = new File(dbPath);

        if (!f.exists()) {
            creatDb();
        }
        functions();
        creatGUI();
        loadDb();
    }

    private Connection getConnection() throws Exception {
        if (connection == null) {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            connection = DriverManager.getConnection("jdbc:derby:" + dbPath + ";create=true");
        }
        return connection;
    }

    private void creatDb() {
        try {
            Statement stat;
            stat = getConnection().createStatement();
            stat.execute("CREATE TABLE APP.MYTABLE ( Age int, Name varchar(255) )");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private void functions() {
        addButton = new JButton("add row");
        ActionListener action = new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    Statement stat;
                    stat = getConnection().createStatement();
                    stat.execute("insert into APP.MYTABLE values (25, 'SHALKAM')");
                    loadDb();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };
        addButton.addActionListener(action);
        //////////////////
        restButton = new JButton("reset");
        ActionListener action2 = new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    Statement stat;
                    stat = getConnection().createStatement();
                    stat.execute("DELETE FROM APP.MYTABLE");
                    loadDb();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };
        restButton.addActionListener(action2);
    }

    private void loadDb() {
        try {
            Statement stat;
            stat = getConnection().createStatement();
            ResultSet rs = stat.executeQuery("SELECT * FROM APP.MYTABLE");
            ArrayList<String[]> list = new ArrayList<String[]>();
            while (rs.next()) {
                String s = rs.getString("Name");
                float n = rs.getFloat("Age");
                list.add(new String[]{s, n + ""});
            }
            data = new String[list.size()][2];
            model.setDataVector(list.toArray(data), new Object[]{"Name", "code"});
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void creatGUI() {
        JFrame frame = new JFrame("Inserting rows in the table!");
        JPanel panel = new JPanel(new GridLayout(1, 2));
        model = new DefaultTableModel();
        table = new JTable(model);
        panel.add(addButton);
        panel.add(restButton);
        frame.add(table, BorderLayout.CENTER);
        frame.add(panel, BorderLayout.NORTH);
        frame.setSize(400, 300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

تم تعديل هذه المشاركة بواسطة shalkam في 2 مارس 2011 في 20:46

#8

بالنسبه للكود

System.getProperty("user.dir")

فهو يعمل بالفعل وليس به اى اخطاء

Software Developer
Mahmoudkelany.com


 

#9
Mahmoud Kelany كتب:

بالنسبه للكود

System.getProperty("user.dir")

فهو يعمل بالفعل وليس به اى اخطاء

انا عندي هذا الكود يقوم بانشاء قاعدة البيانات بعيدا عن مسار ملفات الجافا

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