إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    Java الإنترفيس Statement في جافا

    مقدمة

    الإنترفيس Statement مصمم لإرسال الإستعلامات الثابتة التي لا تتغير إلى قاعدة البيانات, أي يمكنك إستخدامه في حال كنت تريد تنفيذ نفس أوامر الـ SQL في كل مرة تقوم فيها بتشغيل البرنامج.

    إفتراضياً, كائن واحد من الإنترفيس ResultSet مقابل كائن واحد من الإنترفيس Statement يمكن فتحه في نفس الوقت.
    مع العمل أنه يمكن وجود أكثر من كائن نوعه ResultSet مفتوح في نفس الوقت, بشرط أن يكون كل واحد منهم مرتبط بكائن Statement مختلف.

    ملاحظة: إستدعاء أي دالة من الدوال الإنترفيس Statement التي يمكن إستخدامها لإرسال إستعلامات إلى قاعدة البيانات تغلق كائن الـ ResultSet الحالي بشكل تلقائي بعد تنفيذ الإستعلام.


    بناؤه

    public interface Statement
    extends Wrapper, AutoCloseable
    	

    دوال الإنترفيس Statement

    الجدول التالي يحتوي على دوال الإنترفيس Statement.

    الدالة مع تعريفها
    public Connection getConnection()

    ترجع كائن الـ Connection الذي تم من خلاله إنشاء كائن الـ Statement الذي قام باستدعائها.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.

    public ResultSet executeQuery(String sql) تنفذ الإستعلام الذي نقوم بتمريره لها كنص في قاعدة البيانات, ثم ترجع نتيجة الإستعلام ككائن نوعه ResultSet.
    الأمر الذي يمرر لها في العادة يكون أمر SELECT ثابت.
    إنتبه: لا يمكن إستدعاء هذه الدالة من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement.

    • ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
    • ترمي الإستثناء SQLTimeoutException في حال بقي كائن الـ Statement في وضعية الإنتظار حتى تخطى المدة التي تم تحديدها بواسطة الدالة setQueryTimeout().
    public int executeUpdate(String sql) تنفذ الإستعلام الذي نقوم بتمريره لها كنص في قاعدة البيانات.
    ترجع عدد الأسطر التي تم إضافتها أو التعديل عليها. و ترجع 0 في حال كان الإستعلام لا يرجع شيء.
    إنتبه: لا يمكن إستدعاء هذه الدالة من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement.

    • ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
    • ترمي الإستثناء SQLTimeoutException في حال بقي كائن الـ Statement في وضعية الإنتظار حتى تخطى المدة التي تم تحديدها بواسطة الدالة setQueryTimeout().
    public ResultSet getResultSet() ترجع نتيجة الإستعلام الذي قمنا بإرساله سابقاً بواسطة كائن الـ Statement الذي قام باستدعائها ككائن نوعه ResultSet.
    ترجع null في حال لم يرجع الإستعلام أي نتيجة.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات أو تم إستدعاءها على كائن Statement مغلق.
    public void addBatch(String sql) تضيف نص الإستعلام الذي نمرره لها كـ Argument في لائحة خاصة في كائن الـ Statement الذي قام باستدعائها. الهدف من هذه الائحة تجميع الإستعلامات المراد إرسالها إلى قاعدة البيانات و إرسالهم دفعة واحدة مما يسرع الأداء.
    نص الإستعلام الذي نمررها مكان الباراميتر sql يكون عبارة عن أمر INSERT أو UPDATE.

    إنتبه: لا يمكن إستدعاء هذه الدالة من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement, أو في حال كان الـ Driver المستخدم لا يدعم عملية تجميع الإستعلامات و إرسالها دفعة واحدة (Batching Process), أو في حال تم إستدعاءها من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement.
    public int[] executeBatch() ترسل أمر يقضي بتنفيذ مجموعة أوامر الـ SQL المعدة للإرسال دفعة واحدة و بنفس الترتيب الذي تم إضافتهم فيها بواسطة الدالة addBatch().
    إذا تم تنفيذ جميع الأوامر التي تم تجهيزها بواسطة الدالة addBatch(), ترجع مصفوفة نوعها int.

    قيم عناصر هذه المصفوفة تكون إحدى هذه الإحتمالات:
    1. رقم أكبر أو يساوي صفر يؤكد أن الأمر قد تم تنفيذه بنجاح. الرقم عبارة عن عدد الأسطر التي تم إضافتها أو تحديث قيمها.
    2. قيمة المتغير SUCCESS_NO_INFO التي يمكنك تحديدها بنفسك, لأن هذا المتغير هو ثابت مجهز في الكلاس Statement. هذا الرقم يؤكد أن عدد الأسطر التي أضيفت أو تم تعديل قيمها غير معروف.
    3. قيمة المتغير EXECUTE_FAILED التي يمكنك تحديدها بنفسك, لأن هذا المتغير هو ثابت مجهز في الكلاس Statement أيضاً. هذا الرقم يؤكد أنه لم يتم تنفيذ جميع الأوامر بنجاح و لكن الـ Driver إستمر في تنفيذ الأوامر الموضوعة.

    إنتبه: لا يمكن إستدعاء هذه الدالة من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement.

    • ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
    • ترمي الإستثناء SQLTimeoutException في حال بقي كائن الـ Statement في وضعية الإنتظار حتى تخطى المدة التي تم تحديدها بواسطة الدالة setQueryTimeout().
    public void clearBatch() تمسح الإستعلامات التي تم تجميعها في كائن الـ Statement الذي قام باستدعائها.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement, أو في حال كان الـ Driver المستخدم لا يدعم عملية تجميع الإستعلامات و إرسالها دفعة واحدة (Batching Process).
    public void cancel() تقوم بإلغاء الإستعلام الذي تم تجهيزه في كائن الـ Statement في حال كانت قاعدة البيانات و الـ Driver المستخدم يدعمان عملية إلغاء الإستعلام.

    • ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement.
    • ترمي الإستثناء SQLFeatureNotSupportedException في حال كان الـ Driver لا يدعم هذه الدالة.
    public void close() تستخدم لإغلاق الإتصال مع قاعدة البيانات, فعلياً تغلق كائن الـ Statement و كائن الـ ResultSet المرتبط به.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
    public boolean isClosed() تستخدم لمعرفة إذا كان كائن الـ Statement الذي قام باستدعائها مغلقاً أم لا.
    ترجع true إذا كان مغلقاً, و ترجع false إذا كان لا يزال مفتوحاً.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
    public void setQueryTimeout(int seconds) تحدد عدد الثواني الأقصى الذي قد يتنظره الـ Driver المستخدم في عملية الإتصال لتنفيذ أوامر من كائن الـ Statement.
    عند إستدعائها نمرر لها رقم أكبر أو يساوي صفر يمثل عدد الثواني كـ Argument.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات أو في حال قمنا بإعطائها قيمة أصغر من صفر.
    public int getQueryTimeout() ترجع عدد الثواني الأقصى الذي قد يتنظره الـ Driver المستخدم في عملية الإتصال لتنفيذ أوامر من كائن الـ Statement.
    ترجع 0 في حال لم يتم تحديد فترة الإنتظار.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات أو تم إستدعاءها على كائن Statement مغلق.
    public void setMaxRows(int max) تحدد عدد الأسطر الأقصى الذي يمكن أن يحتويه أي كائن ResultSet ينتج من كائن الـ Statement.
    عند إستدعائها نمرر لها رقم رقم أكبر أو يساوي 0 كـ Argument يمثل عدد الأسطر الأقصى الذي يمكن أن يحتويه كائن الـ ResultSet. في حال قمنا بتمرير 0 فهذا يعني أنه لا حدود للأسطر التي يمكن أن يحتويها كائن الـ ResultSet.
    ملاحظة: في حال كان عدد الأسطر الذي نتج عن الإستعلام أكبر من عدد الأسطر التي يمكن أن يستوعبها كائن الـ ResultSet, يتم تجاهل الأسطر الزائدة.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات أو في حال قمنا بإعطائها قيمة أصغر من صفر.
    public SQLWarning getWarnings() ترجع أول تحذير قام بإطلاقه كائن الـ Statement الذي قام باستدعائها ككائن نوعه SQLWarning. ترجع null في حال لم يكن هناك أي تحذير.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement.
    public void clearWarnings() تمسح جميع التحذيرات التي تم إصدارها بسبب كائن الـ Statement الذي قام باستدعائها.
    ملاحظة: إذا قمت باستدعاء الدالة getWarnings() بعد استدعاء هذه الدالة, سترجع لك null.

    ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement.

    مثال شامل

    في المثال التالي سنفترض أننا سنقوم بالإتصال بقاعدة بيانات إسمها company تمثل قاعدة بيانات لشركة, و مبنية بنظام MySQL.
    بعدها سنقوم بإضافة بيانات موظف جديد في جدول خاص بالموظفين إسمه employee.


    Main.java
    // هنا قمنا بإستدعاء الكلاسات و الإنترفيسات التي سنستخدمها للتعامل مع قاعدة البيانات
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    public class Main {
     
        public static void main(String[] args) {
     
            try {
                // الذي سنعتمد عليه للوصول إلى قاعدة البيانات MYSQL Driver هنا قمنا بتحديد رابط الوصول لبرنامج الـ
                Class.forName("com.mysql.jdbc.Driver");
     
                // و الذي سنستخدمه لتحديد المعلومات الأساسية التي نحتاجها للإتصال بقاعدة البيانات Connection هنا قمنا بإنشاء كائن من الكلاس
                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/company","root","root");
     
                // و الذي سنستخدمه لإرسال إستعلامات إلى قاعدة البيانات Statement هنا قمنا بتجهيز كائن نوعه
                Statement stmt = con.createStatement();
     
                // rs هنا قمنا بإرسال إستعلام إلى قاعدة البيانات لجلب جميع أسماء الموظفين الموجودة في جدول الموظفين. بعدها قمنا بتخزين النتيجة في الكائن
                ResultSet rs = stmt.executeQuery("select first_name, last_name from employee");
     
                // rs هنا أنشأنا حلقة تمر على جميع الأسطر التي تم تخزينها في الكائن
                while(rs.next()) {
                    // rs هنا في كل دورة سيتم عرض إسم جديد من الأسماء الموجودة في الكائن
                    System.out.println(rs.getString("first_name") +" "+ rs.getString("last_name"));
                }
     
                // هنا قمنا بإغلاق الإتصال مع قاعدة البيانات
                con.close();
            }
            catch(Exception e) {
                System.out.println(e.getMessage());
            }
     
        }
     
    }
    		

    لو كانت قاعدة البيانات موجودة و قمنا بتشغيل البرنامج, سيظهر لنا جميع الأسماء التي أرجعها لنا الإستعلام كالتالي.

    Jihad Amer
    Rola Farha
    Malek Salami
    Rima Saiid
    Said Houssayyan
    Mohamad Mostafa
    ... 
    		
    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات الأمن السيبراني

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب