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

[فيديو] كيفية استخدام قاعدة بيانات hypersql في الجافا

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

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

بعد اول موضوع عملته عن كيفية استخدام قاعدة بيانات apache derby في الجافا و الذي لم اجد نفسي موفقا في عمله

قررت اعمل موضع اخر عن كيفية استخدام قاعدة بيانات hypersql و اغير طريقة الشرح و كتابة الكود

فعملت صنف class فيه جميع الدوال الخاصة بالتعامل مع قاعدة البيانات بحيث انه مشاهد الفيديو يستفيد اكثر و يطلع من الموضوع بكود يمكنه استخدامه فيما بعد في اكثر من مشروع

اول حاجة الفيديو

ثانيا الاكواد :

1- مكتبة hypersql :

http://www.mediafire.com/file/8h5el48hnzct542/hsqldb.jar

2- كود الكلاس

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

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

    private String absPath;
    private static final hsql_conn INSTANCE = new hsql_conn();

    public static final hsql_conn getInstance() {
        return INSTANCE;
    }

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

    /**
     * create the database if it doesn't exist
     * @param path String the directory at which the database will be created it should have file separator in the end
     * @return created boolean true if the database is created
     */
    public boolean createDB(String query) {
        boolean created = false;
        File f = new File(absPath);
        if (!f.exists()) {
            f.mkdir();
            try {
                Class.forName("org.hsqldb.jdbc.JDBCDriver");
            } catch (Exception e) {
                System.err.println("ERROR: failed to load HSQLDB JDBC driver.");
            }
            try {
                Connection c = DriverManager.getConnection("jdbc:hsqldb:file:" + absPath + "data;");
                Statement stat = c.createStatement();
                stat.execute(query);
                stat.close();
            } catch (SQLException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            created = true;
        }
        return created;
    }

    /**
     * Handles queries that will have results like queries using the "Select" statement
     * @param query String  the sql query to execute against the database
     * @return listOfMaps List the result from the query in the form of list of linked hash maps
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public ResultSet doQuery(String query) throws SQLException, ClassNotFoundException {
        Connection c = this.getConnection();
        Statement stat = c.createStatement();
        ResultSet rs = stat.executeQuery(query);
        return rs;
    }

    /**
     * Handles queries that won't have results like queries using statements like "create", "drop" or "delete"
     * @param query String  the sql query to execute against the database
     * @return rs boolean true if successful
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public boolean execQuery(String query) throws SQLException, ClassNotFoundException {
        Connection c = this.getConnection();
        Statement stat = c.createStatement();
        boolean rs = stat.execute(query);
        stat.close();
        return rs;
    }

    /**
     * connects to the database
     * @return c the connection to the database
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    private Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("org.hsqldb.jdbc.JDBCDriver");
        Connection c = DriverManager.getConnection("jdbc:hsqldb:file:" + absPath + "data;ifexists=true");
        return c;
    }

    /**
     * shuts down the database
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public void shutdownDB() throws ClassNotFoundException, SQLException {
        Class.forName("org.hsqldb.jdbc.JDBCDriver");
        Connection c = DriverManager.getConnection("jdbc:hsqldb:file:" + absPath + "data;shutdown=true");
    }
}

3- كود يوضح كيفية استخدام الكلاس

public void functions() throws SQLException, ClassNotFoundException {
        hsql_conn connection = hsql_conn.getInstance();
        if(connection.createDB("create table mytable (age int, name varchar(255))")) System.out.println("تم انشاء قاعدة البيانات بنجاح");
        else System.out.println("لم يتم انشاء قاعدة البيانات او انها تم انشاؤها بالفعل");
        connection.execQuery("insert into mytable values(5 , 'shalkam')");
        ResultSet rs = connection.doQuery("select * from mytable");
        while(rs.next()) {
            System.out.println(rs.getString("age") + " - " + rs.getString("name"));
        }
    }

نرجو ان تجدو الشرح افضل هذه المرة

رابط الموضوع الاصلي http://barmig.blogspot.com/2011/03/hypersql.html

تم تعديل هذه المشاركة بواسطة shalkam في 4 مارس 2011 في 05:11

#2

أعتقد قاعدة البينات هذه من JBOSS

بالمناسبة هل تعرف ما فائدتها أو ما مميزاتها؟

بمعنى آخر لماذا تستخدم؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

جميل اخى مصطفى جزاك الله كل خير

تعديلات بسيطه على الكود

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

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

	private String absPath;
	private static final hsql_conn INSTANCE = new hsql_conn();

	public static final hsql_conn getInstance() {
    	return INSTANCE;
	}

	private hsql_conn() {
    	absPath = System.getProperty("user.dir")
            	+ System.getProperty("file.separator") + "db";
	}

	/**
 	* create the database if it doesn't exist
 	* @param path String the directory at which the database will be created it should have file separator in the end
 	* @return created boolean true if the database is created
 	*/
	public boolean createDB(String query) throws SQLException {
    	boolean created = false;
    	File f = new File(absPath);
    	if (!f.exists()) {
        	f.mkdirs();
        	Statement stat = getConnection().createStatement();
        	stat.execute(query);
        	stat.close();
        	created = true;
    	}
    	return created;
	}

	/**
 	* Handles queries that will have results like queries using the "Select" statement
 	* @param query String  the sql query to execute against the database
 	* @return listOfMaps List the result from the query in the form of list of linked hash maps
 	* @throws SQLException
 	*/
	public ResultSet doQuery(String query) throws SQLException {
    	Statement stat = getConnection().createStatement();
    	ResultSet rs = stat.executeQuery(query);
    	return rs;
	}

	/**
 	* Handles queries that won't have results like queries using statements like "create", "drop" or "delete"
 	* @param query String  the sql query to execute against the database
 	* @return rs boolean true if successful
 	* @throws SQLException
 	*/
	public boolean execQuery(String query) throws SQLException {
    	Statement stat = getConnection().createStatement();
    	boolean rs = stat.execute(query);
    	stat.close();
    	return rs;
	}

	/**
 	* connects to the database
 	* @return c the connection to the database
 	* @throws SQLException
 	*/
	private Connection getConnection() throws SQLException {
    	try {
        	Class.forName("org.hsqldb.jdbc.JDBCDriver");
    	} catch (ClassNotFoundException ex) {
        	System.err.println("Hsql driver not found.");
    	}
    	Connection c = DriverManager.getConnection("jdbc:hsqldb:file:"
            	+ absPath + System.getProperty("file.separator") + "data");
    	return c;
	}

	/**
 	* shuts down the database
 	* @throws SQLException
 	*/
	public void shutdownDB() throws SQLException {
    	getConnection().close();
	}
}

بالنسبه للـgetInstance

بدال عاوز تعملها بالطريقه بتاعت الـ instance يقبى تخلى البناء private لمنع اى مبرمج من اخذ كائن من هذه الكلاس

الا بالداله getInstance

بالنسبه لكل مره بتعمل فيها عمليه تحميل للـ driver دا عبء على البرنامج

بالنسبه للـshutdownDB فهى تقوم باغلاق الاتصال بينك وبين قاعده البيانات

تظهر اكثر فى قاعده الـ Access تلاقى القاعده بجوارها ملف اخر بعد اغلاق البرنامج

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

لكن انا عملتها لك شوفها

بالتوفيق اخى مصطفى

جزاكم الله كل خير ووفقكم الى ما فيه خير :)

اه بالمناسبه

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

http://hsqldb.org/

ثانى شىء نسيت ان انبهك اليه

هو اسم الكلاس

فاتبع convention ثابت فى كل برمجتك

ومن الافضل اتباع الخاص بsun او بالجافا يعنى

ميكروسوفت هى التى تستخدم الـ underscore (_) فى اسماء الكلاس والمتغيرات والدوال

Software Developer
Mahmoudkelany.com


 

#4

انا حكاية اني اجيب المسار الخاص بملف ال jar خلاص غلب حماري فيها

انا جربت الكود

System.out.println(System.getProperty("user.dir"));

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

/media/sda3/programming/java/projects/hsql

اما لما احول المشروع الى ملف جار يكون المسار كالتالى

/home/shalkam

فما هو الحل

مثلا ممكن اغير الكود بيحث انه المسار يحدد حسب نوع نظام التشغيل ام هذا الخظأ يحدث معي أنا فقط و لا يستحق ان نغير الكود

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

لكن انا عملتها لك شوفها

ممكن توضح المسارات التي ظهرت لك

#5

السلام عليكم

لماذا معظم المبرمجين هنا يستخدمون الطرق القديمة بالربط مع قواعد البيانات (لا تاخذوها بغير قصد) ......؟؟؟؟؟؟؟؟؟؟؟

:blink: :blink: :blink:

في حين وجد الان طرق جميلة مثل Hibernate , Persistence ,SDE for Netbeans , .............etc

:wub: :wub: :wub:

للتذكره لا اكثر

سلامي

:wub: :wub: :wub: :wub:

#6
shalkam كتب:

انا حكاية اني اجيب المسار الخاص بملف ال jar خلاص غلب حماري فيها

انا جربت الكود

System.out.println(System.getProperty("user.dir"));

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

/media/sda3/programming/java/projects/hsql

اما لما احول المشروع الى ملف جار يكون المسار كالتالى

/home/shalkam

فما هو الحل

مثلا ممكن اغير الكود بيحث انه المسار يحدد حسب نوع نظام التشغيل ام هذا الخظأ يحدث معي أنا فقط و لا يستحق ان نغير الكود

ممكن توضح المسارات التي ظهرت لك

لالا بالنسبه فى ملف الجار

لم بعمل تشغيل من ملف الجار بيكون لى فولدر بجوار ملف الجار وهذا ما تريده انت

فبالتالى فهى تعمل لدى تمام وايضا من المفترض انها تعمل لديك بشكل جيد لانها property وليس environment

يعنى حاجه لا تعتمد على النظام او بيئه العمل

ربما لديك مشكله لكن بالنسبه للجميع اظن انها تعمل معهم كويس

بالنسبه للمسارات اللى طلعت معايا انه طلع لى فولدر قاعده البيانات خارج المشروع نهائيا

ولكن لا تتعب نفسك فى التعديل فكلما عدلت لن تفادى كل الاحتمالات

فبالتالى الداله user.dir هى انسب شىء فى هذه الظروف

بالتوفيق

alionline كتب:

السلام عليكم

لماذا معظم المبرمجين هنا يستخدمون الطرق القديمة بالربط مع قواعد البيانات (لا تاخذوها بغير قصد) ......؟؟؟؟؟؟؟؟؟؟؟

:blink: :blink: :blink:

في حين وجد الان طرق جميلة مثل Hibernate , Persistence ,SDE for Netbeans , .............etc

وعليكم السلام ورحمه الله وبركاته

عن نفسى انا لا اعلم شىء عما قولت اخى الكريم

فبالتالى هل من الممكن تنزيل دروس او شرح يتكلم عنها , ربما تكون افضل ممما نستخدمه الان

لكن هذا ما نعرفه , واانا اظنها افضل ان شاءا لله

منتظرين ردك اخى الكريم

Software Developer
Mahmoudkelany.com


 

#7

إن شاء الله

اخ محمود سوف انزل فديو يشرح الpersistence

في الnetbeans

تحياتي

#8

اخى الكريم اسمح لى بالمشاركة فى اجابة سؤالك على حسب ما فهمت و هو استدعاء ملف من داخل الجار فيل (jar File) و ذلك عن طريق الكود التالى

getClass().getResource("و هنا يتم كتابة مسار الملف داخل الباكدج")

مثال على المسار بتاعك

getClass().getResource("/media/sda3/programming/java/projects/hsql/")

تحياتي

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…