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

[ تنبيه ] ربط قاعدة البيانات في النت بينز

بدأه Game11 في 25 مايو 2010 · 25 رد · 3,030 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني اريد مساعدتكم في ربط قاعدة البيانات خاصتي بالبروجكت انا انشأته ,, يعني البيانات تنتقل من البروجكت (الواجهة ) الى قاعدة البيانات و العكس عن طريق اوبجكت يدعى Connector , وهذا الاوبجكت منشوء من كلاس ليس موجودا اساسا ضمن Package في الجافا , وانما أنشئ بشكل مستقل و لكن كيف اضيفه الى package في الجافا لكي اكون قادر على انشاء الاوبجكت منه و استعمال دواله

و هذا هو الكلاس المنشوء بشكل مستقل :

public class MyConnector {


        static final String JDBC_DRIVER = "org.apache.derby.jdbc.ClientDriver";
        static final String DATABASE_URL = "jdbc:derby://localhost:1527/userdb"; 

	private static  Connection connection;
        private static Statement statement;
        private static ResultSet resultSet ;


    public  MyConnector(){
             try {
                    Class.forName( JDBC_DRIVER );
                     connection = DriverManager.getConnection( DATABASE_URL );
                     statement = connection.createStatement();     
             } catch ( SQLException sqlException ) {
                     JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
                   "Database Error", JOptionPane.ERROR_MESSAGE );
      }

      catch ( ClassNotFoundException classNotFound ) {
                 JOptionPane.showMessageDialog( null, classNotFound.getMessage(), 
                    "Driver Not Found", JOptionPane.ERROR_MESSAGE );            
      }

    }

    public static  ResultSet excuteQuery(String query){
             try {
                      resultSet =   statement.executeQuery(query);

              } catch ( SQLException sqlException ) {
                 JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
                    "Database Error", JOptionPane.ERROR_MESSAGE );
              }
                 return resultSet ;
    }

     public static void excuteUpdate(String query){
          try {
              statement.executeUpdate(query);
      } catch ( SQLException sqlException ) {
             JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
                "Database Error", JOptionPane.ERROR_MESSAGE );
      } 


    }
}

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

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 25 مايو 2010 في 19:35 — السبب: إضافة وسم code

#2

بداية ارجو تعديل الكود

اخى الكريم

اولا قم بأخد object من ال class ::::

MyConnector  c=new MyConnector ();

الان بأمكانك استخدام الدوال الموجودة بداخل هذة الفئة

دعنا نعرف ما هى وظيفة هذة الدالة

public static ResultSet excuteQuery(String query)

هذة الدالة تاخد متغير من النوع string الا و هو التعليمة

اى جمل ال sql جيد؟!,,,,,ليس ذلك فحسب بل انت تستخدمها عندما تريد ان ترجع بقيم من قاعدة البيانات اى ليس مجرد مسح و اضافة فى قاعدة البيانات

و انت ستستقبل القيم فى متغير من النوع ResultSet

اى هى خاصة تقريبا بتعليمة select

حسنا؟!

اما عن هذة الدالة ::::

public static void excuteUpdate(String query){

فهى ايضا تأخد تعليمة منك تنفذها فى قاعدة البيانات خاصتك و لكن..! لا تقوم بارجاع اى بيانات

اى هى خاصة بالتحديث و المسح و الاضافة فقط لا غير

و تستطيع ان تنادى على هذة الدوال بكل سهولة و يسر مع استخدام المكنسة الكهربائية ...

امممممم

هكذا:::::::::::::

c.excuteQuery("put a query");

و هكذا

و لا تنسانى من دعائك يا اخى............. :wub:

تم تعديل هذه المشاركة بواسطة اسراء شلبى في 25 مايو 2010 في 18:30

00020309t.gif

1958_1963.gif
#3

فى انتظااااااااااار الاخ علاء

:mad: :mad: :mad:

−1
00020309t.gif

1958_1963.gif
#4
اقتباس
ى جمل ال sql جيد

عذرا لم انتبه انك ستستخدم derby

00020309t.gif

1958_1963.gif
#5
connection = DriverManager.getConnection( DATABASE_URL );

فى هذه الحاله اخى الكريم

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

فمن الافضل ان تفعل هكذا

static final String JDBC_DRIVER = "org.apache.derby.jdbc.ClientDriver";
static final String DATABASE_URL = "jdbc:derby://localhost:1527/userdb"; 
    private static final String username = "root";
    private static final String password = "root";

وعند استدعاء الاتصال

تكون المدخلات هكذا

connection = DriverManager.getConnection(DATABASE_URL, username, password);

شرح جميل اختى اسراء

ولكن لدى ملاحظه ؟

c.excuteQuery("put a query");

عذرا

لماذا تستخدمين excuteQuery() على كائن من MyConnector ?

ولا تستخدمينها على اسم الـclass باعتبار انها static member

Software Developer
Mahmoudkelany.com


 

#6
اقتباس
لماذا تستخدمين excuteQuery() على كائن من MyConnector ?

ولا تستخدمينها على اسم الـclass باعتبار انها static member

لا مشكلة فى ذلك و لكنى

كسلت اكتب تانى بصراحة بعد ما كنت اخدت object من الفئة

:)

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

انا كنت مسطبة برنامجى من غير رقم سرى

على كل اخى الكريم لا تنسى اسم المتسخدم و كلمة المرور ان وجد

و لا تنسى ايضا انا اتحدث على هذة النقطة بالذاات من منطلق تعاملى مع sql و ليس derby

فأرجو ان تراعى هذة النقطة

00020309t.gif

1958_1963.gif
#7
اسراء شلبى كتب:

لا مشكلة فى ذلك و لكنى

كسلت اكتب تانى بصراحة بعد ما كنت اخدت object من الفئة

:)

انا كنت مسطبة برنامجى من غير رقم سرى

على كل اخى الكريم لا تنسى اسم المتسخدم و كلمة المرور ان وجد

و لا تنسى ايضا انا اتحدث على هذة النقطة بالذاات من منطلق تعاملى مع sql و ليس derby

فأرجو ان تراعى هذة النقطة

انا اعلم انه لا مشكله فى ذلك

خلاص فهمت :lol: :lol:

فهو الكسل دائما :wacko:

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

جزاكم الله خيرا على التنبيه

سلام عليكم

Software Developer
Mahmoudkelany.com


 

#8

*- يحظر استخدام اللهجة العامية

*- أو كتابة الأسئلة باللغة الإنجليزية

*- أو كتابة الكلمات الإنجليزية بالعربية

====

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

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

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

728x90.png

#9

هذا ما كنت انتظره......

00020309t.gif

1958_1963.gif
#10
اسراء شلبى كتب:

هذا ما كنت انتظره......

:lol: :lol: :lol: :lol:

وانا اقول منتظره ايه بس :wub: :wub:

Software Developer
Mahmoudkelany.com


 

#11

اشكركم جميعا على المساعدة و اسأل الله ان يوفقكم في الدنيا و الاخرة

#12

لا زال لدي بعض الاسئلة !!

لم استطع اضافة الكلاس في الجافا ,, لاني انا فتحت ملف بنفس المشروع من نوع كلاس , الا ان هناك بعض الاخطاء تقول " ان الدالة exuteQuery غير موجودة " مع العلم ان هذه الدالة داخل الدلة exuteQuery <<

ثانيا : انا فهمت كيف ادخل بيانات الى القاعدة عن طريق المشروع عن طريق exuteUpdate , و لكن كيف استرجع بيانات من القاعدة الى المشروع و كيف اقوم بالبحث فيها , و على العموم الف شكر لكم بما قدمتموه من مساعدة و بالتوفيق

الاسطر الملونة باللون الاحمر بها اخطاء

public class MyConnector {


        static final String JDBC_DRIVER = "org.apache.derby.jdbc.ClientDriver";
        static final String DATABASE_URL = "jdbc:derby://localhost:1527/userdb"; 

	private static  Connection connection;
        private static Statement statement;
        private static ResultSet resultSet ;


    public  MyConnector(){
             try {
                    Class.forName( JDBC_DRIVER );
                     connection = DriverManager.getConnection( DATABASE_URL );
                     statement = connection.createStatement();     
             } catch ( SQLException sqlException ) {
                     JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
                   "Database Error", JOptionPane.ERROR_MESSAGE );
      }

      catch ( ClassNotFoundException classNotFound ) {
                 JOptionPane.showMessageDialog( null, classNotFound.getMessage(), 
                    "Driver Not Found", JOptionPane.ERROR_MESSAGE );            
      }

    }

    public static  ResultSet excuteQuery(String query){
             try {
                      resultSet =   statement.executeQuery(query);

              } catch ( SQLException sqlException ) {
                 JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
                    "Database Error", JOptionPane.ERROR_MESSAGE );
              }
                 return resultSet ;
    }

     public static void excuteUpdate(String query){
          try {
              statement.executeUpdate(query);
      } catch ( SQLException sqlException ) {
             JOptionPane.showMessageDialog( null, sqlException.getMessage(), 
                "Database Error", JOptionPane.ERROR_MESSAGE );
      } 


    }
}

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 25 مايو 2010 في 21:04

#13

اظن هذا الرابط يساعدك

http://java.sun.com/docs/books/tutorial/jdbc/basics/index.html

بالتوفيق


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

الأنفال ۳۳                                  
 

#14
اقتباس
ن كيف استرجع بيانات من القاعدة الى المشروع و كيف اقوم بالبحث فيها , و على العموم الف شكر لكم بما قدمتموه من مساعدة و بالتوفيق

اخى انصحك بالاطلاع على بعض دروس لغة قاعدة البياانت التى ستستخدمها

عامة

عندما تريد ان تعود ببعض البيانات

يجب عليك تحديد الجدول الذى ستبحث فيه

و مثلا حاول ان ترتب شروطك على البيانات التى تريد ان تعود بها

فمثلا هذة التعليمة موجود فى sql

Select * from users where condition

يعنى احدد بعض البيانات التى اريدها على حسب شرط معين

فقط.........

00020309t.gif

1958_1963.gif
#15

اخى العزيز انا جربت الـ class بتاعتك بس على mysql وهيا تعمل بنجاح

وهذا هو ملف الاختبار

اخى اود ان انبهك الى ان تنظر الى اسم المتسخدم والرقم السرى

فربنما هناك خطا

فقد قمت بعمل اختبار وهذا كود الاختبار

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author Mahmoud Mahrous
 */
public class MyConnectorTest {

    public static void main(String[] s) throws SQLException {
        MyConnector mc = new MyConnector();
        ResultSet rs = MyConnector.excuteQuery("select * from notes");
        while (rs.next()) {
            System.out.println(rs.getInt(1) + " // " + rs.getString(2) + " // " + rs.getString(3));
        }
       MyConnector.excuteUpdate("insert into notes values ('10' , 'note 5' , ' no thing 5' , '2010-12-20' , '4:40:00' , '0' , 'High' )");
    }
}

وهذه هى النتائج

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

24424.jpg

وبعد التنفيذ لاحظ فقد تم اضافه صف جديد

3333bv.jpg

مممممممكن تعرض الـ query الخاص بامر insert اللى حضرتك كتبته

ونحاول نساعدك ان شاء الله

تم تعديل هذه المشاركة بواسطة Eng.Hamzawy في 25 مايو 2010 في 21:12

Software Developer
Mahmoudkelany.com


 

#16

اشكركم , حقا استفدت كثيرا منكم و من خبرتكم و هناك ايضا سؤالين :blush: ,,,,,,,,,, انا اعلم اني اكثرت عليكم الاسئلة لكن لا بأس تحملوني :)

ما هو البارمتير(اي النوع ) الذي اضعه في الدالة ( public static ResultSet excuteQuery(String query و كيف لي ان ابحث في القاعدة عن شي معين و ان وجد , ترجع لي عبارة "yes" و ان لم يوجد ترجع لي عبارة "no"

و ماذا تعني العبارة (resultSet = statement.executeQuery(query مع العلم انها داخل الدالة ( public static ResultSet excuteQuery(String query

#17
resultSet

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

ResultSet resultSet

هذة class جميع البيانات التى تحددها من قاعدة بيانات فى المرة الواحد تكون مخزنة بداخلة

اما عن

(

public static ResultSet excuteQuery(String query

اقتباس
و البارمتير(اي النوع ) الذي اضعه في الدالة

الاخ علاء هيقطعك :lol:

انت عندما تكتب التعليمة فهى تكتب داخل علامات تنصيص يعنى لا تكتب هكذا بمفردها

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

يعنى مثلا

select*student where grade=50;

اعتقد ان التعليمة كدة صحيحة

انت هكذا تامر البرنامج ان يقوم بتحديد مثلا اسماء الطلاب و الذين درجاتهم تساوى 50

من الممكن ان يكون عشرة او اكثر

اسمائهم اين تخرن ...؟

تكون مخزنة فى المتغير

resultSet

و ان وجد بيانات عندما تطبع هذة البيانات على textarea مثلا ستجد بيانات

و ان لم يوجد بيانات ستجد ان المتغير لم يطبع شىء على الوجهة الامر لا يحتاج الى yes or not

(resultSet = statement.executeQuery(query

اقتباس
و ماذا تعني العبارة

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

يعنى لا تستخدم للتحديث او المسح او الاضافة

اقتباس
انا اعلم اني اكثرت عليكم الاسئلة لكن لا بأس تحملوني

حاضر لما نشوف اخرتها

.

.

.

.

.

امزح معك انت كأخ صغير لى

تم تعديل هذه المشاركة بواسطة اسراء شلبى في 26 مايو 2010 في 07:05

00020309t.gif

1958_1963.gif
#18

شكرا جزيلا :) على المعلومات القيمة

#19

بفضل الله ثم بفضلكم كل شي اصبح تمام , الا ان هناك عائق صغير و هو Driver ,,, عند فتح المشروع و التنفيذ ارى هذا الجملة "Driver not found" ,

#20

اخى الكريم اثتاء تسطيب البرنامج الخاص بقاعدة البيانات

يطلب منك ادخال اسم المستخدم و كلمة السر

لا تنسى ان تكتبهم

هنا

"jdbc:derby://localhost:1527/userdb

لان البرنامج غير قادر على الاتصال بالبيانات الحالية التى وضعتها فى ال driver

00020309t.gif

1958_1963.gif
#21

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


public static ResultSet excuteQuery(String query){
try {
resultSet = statement.executeQuery(query);

} catch ( SQLException sqlException ) {
JOptionPane.showMessageDialog( null, sqlException.getMessage(),
"Database Error", JOptionPane.ERROR_MESSAGE );
}
return resultSet ;
}

public static void excuteUpdate(String query){
try {
statement.executeUpdate(query);
} catch ( SQLException sqlException ) {
JOptionPane.showMessageDialog( null, sqlException.getMessage(),
"Database Error", JOptionPane.ERROR_MESSAGE );
}


}

على ما اعتقد ان الخطأ من كلمة Statement التي داخل الدالتين و لكن لا اعرف ما بها

تم تعديل هذه المشاركة بواسطة Game11 في 26 مايو 2010 في 18:50

#22

اخى الكريم الكود صحيح

و لكن اعرض لنا ما التعليمة التى كتبتها

و ارسلتها الى الدالة as string

......؟

00020309t.gif

1958_1963.gif
#23

MyConnector.excuteUpdate("insert into Register values ('ali24','2434'));

هذه هي التعليمة

MyConnector.excuteUpdate("insert into Register values (ali24',23456')");

#24

اخى الكريم

تأكد من كتابة التعليمة جيدا

لان اكيد فيه خطأ فى علامات التنصيص

فى سيكول sql

كنت ادخل البيانات هكذا:::::

('"+flight_no+"','"+day+"','"+month+"'

هذة بدلا من

 ('ali24','2434'

فى كود حضرتك

لعلك لاحظت الفرق فى علامة ال + و علامات التنصيص

00020309t.gif

1958_1963.gif
#25

MyConnector.excuteUpdate("insert into Register values ('ali24' ,'23456')");

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 26 مايو 2010 في 20:07

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