Javaالإنترفيس Statement
في جافا
- مقدمة
- دوال الإنترفيس
Statement
- مثال شامل
مقدمة
الإنترفيس Statement
مصمم لإرسال الإستعلامات الثابتة التي لا تتغير إلى قاعدة البيانات, أي يمكنك إستخدامه في حال كنت تريد تنفيذ نفس أوامر الـ SQL في كل مرة تقوم فيها بتشغيل البرنامج.
إفتراضياً, كائن واحد من الإنترفيس ResultSet
مقابل كائن واحد من الإنترفيس Statement
يمكن فتحه في نفس الوقت.
مع العمل أنه يمكن وجود أكثر من كائن نوعه ResultSet
مفتوح في نفس الوقت, بشرط أن يكون كل واحد منهم مرتبط بكائن Statement
مختلف.
ملاحظة: إستدعاء أي دالة من الدوال الإنترفيس Statement
التي يمكن إستخدامها لإرسال إستعلامات إلى قاعدة البيانات تغلق كائن الـ ResultSet
الحالي بشكل تلقائي بعد تنفيذ الإستعلام.
بناؤه
public interface Statement extends Wrapper, AutoCloseable
دوال الإنترفيس Statement
الجدول التالي يحتوي على دوال الإنترفيس Statement
.
الدالة مع تعريفها | |
---|---|
1 | public Connection getConnection()
ترجع كائن الـ |
2 | public ResultSet executeQuery(String sql)
تنفذ الإستعلام الذي نقوم بتمريره لها كنص في قاعدة البيانات, ثم ترجع نتيجة الإستعلام ككائن نوعه ResultSet .الأمر الذي يمرر لها في العادة يكون أمر SELECT ثابت.إنتبه: لا يمكن إستدعاء هذه الدالة من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement .
|
3 | public int executeUpdate(String sql)
تنفذ الإستعلام الذي نقوم بتمريره لها كنص في قاعدة البيانات.ترجع عدد الأسطر التي تم إضافتها أو التعديل عليها. و ترجع 0 في حال كان الإستعلام لا يرجع شيء. إنتبه: لا يمكن إستدعاء هذه الدالة من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement .
|
4 | public ResultSet getResultSet()
ترجع نتيجة الإستعلام الذي قمنا بإرساله سابقاً بواسطة كائن الـ Statement الذي قام باستدعائها ككائن نوعه ResultSet .ترجع null في حال لم يرجع الإستعلام أي نتيجة.ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات أو تم إستدعاءها على كائن Statement مغلق. |
5 | public void addBatch(String sql)
تضيف نص الإستعلام الذي نمرره لها كـ Argument في لائحة خاصة في كائن الـ Statement الذي قام باستدعائها. الهدف من هذه الائحة تجميع الإستعلامات المراد إرسالها إلى قاعدة البيانات و إرسالهم دفعة واحدة مما يسرع الأداء.نص الإستعلام الذي نمررها مكان الباراميتر sql يكون عبارة عن أمر INSERT أو UPDATE.إنتبه: لا يمكن إستدعاء هذه الدالة من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement .ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement , أو في حال كان الـ Driver المستخدم لا يدعم عملية تجميع الإستعلامات و إرسالها دفعة واحدة (Batching Process), أو في حال تم إستدعاءها من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement . |
6 | public int[] executeBatch()
ترسل أمر يقضي بتنفيذ مجموعة أوامر الـ SQL المعدة للإرسال دفعة واحدة و بنفس الترتيب الذي تم إضافتهم فيها بواسطة الدالة addBatch() .إذا تم تنفيذ جميع الأوامر التي تم تجهيزها بواسطة الدالة addBatch() , ترجع مصفوفة نوعها int .قيم عناصر هذه المصفوفة تكون إحدى هذه الإحتمالات:
إنتبه: لا يمكن إستدعاء هذه الدالة من خلال كائن من الإنترفيس PreparedStatement أو الإنترفيس CallableStatement .
|
7 | public void clearBatch()
تمسح الإستعلامات التي تم تجميعها في كائن الـ Statement الذي قام باستدعائها.ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement , أو في حال كان الـ Driver المستخدم لا يدعم عملية تجميع الإستعلامات و إرسالها دفعة واحدة (Batching Process). |
8 | public void cancel()
تقوم بإلغاء الإستعلام الذي تم تجهيزه في كائن الـ Statement في حال كانت قاعدة البيانات و الـ Driver المستخدم يدعمان عملية إلغاء الإستعلام.
|
9 | public void close()
تستخدم لإغلاق الإتصال مع قاعدة البيانات, فعلياً تغلق كائن الـ Statement و كائن الـ ResultSet المرتبط به.ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات. |
10 | public boolean isClosed()
تستخدم لمعرفة إذا كان كائن الـ Statement الذي قام باستدعائها مغلقاً أم لا.ترجع true إذا كان مغلقاً, و ترجع false إذا كان لا يزال مفتوحاً.ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات. |
11 | public void setQueryTimeout(int seconds)
تحدد عدد الثواني الأقصى الذي قد يتنظره الـ Driver المستخدم في عملية الإتصال لتنفيذ أوامر من كائن الـ Statement .عند إستدعائها نمرر لها رقم أكبر أو يساوي صفر يمثل عدد الثواني كـ Argument. ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات أو في حال قمنا بإعطائها قيمة أصغر من صفر. |
12 | public int getQueryTimeout()
ترجع عدد الثواني الأقصى الذي قد يتنظره الـ Driver المستخدم في عملية الإتصال لتنفيذ أوامر من كائن الـ Statement .ترجع 0 في حال لم يتم تحديد فترة الإنتظار. ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات أو تم إستدعاءها على كائن Statement مغلق. |
13 | public void setMaxRows(int max)
تحدد عدد الأسطر الأقصى الذي يمكن أن يحتويه أي كائن ResultSet ينتج من كائن الـ Statement .عند إستدعائها نمرر لها رقم رقم أكبر أو يساوي 0 كـ Argument يمثل عدد الأسطر الأقصى الذي يمكن أن يحتويه كائن الـ ResultSet . في حال قمنا بتمرير 0 فهذا يعني أنه لا حدود للأسطر التي يمكن أن يحتويها كائن الـ ResultSet .ملاحظة: في حال كان عدد الأسطر الذي نتج عن الإستعلام أكبر من عدد الأسطر التي يمكن أن يستوعبها كائن الـ ResultSet , يتم تجاهل الأسطر الزائدة.ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات أو في حال قمنا بإعطائها قيمة أصغر من صفر. |
14 | public SQLWarning getWarnings()
ترجع أول تحذير قام بإطلاقه كائن الـ Statement الذي قام باستدعائها ككائن نوعه SQLWarning . ترجع null في حال لم يكن هناك أي تحذير.ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement . |
15 | public void clearWarnings()
تمسح جميع التحذيرات التي تم إصدارها بسبب كائن الـ Statement الذي قام باستدعائها.ملاحظة: إذا قمت باستدعاء الدالة getWarnings() بعد استدعاء هذه الدالة, سترجع لك null .ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات, أو في حال تم إستدعاءها بعد أن تم إغلاق كائن الـ Statement . |
مثال شامل
في المثال التالي سنفترض أننا سنقوم بالإتصال بقاعدة بيانات إسمها company
تمثل قاعدة بيانات لشركة, و مبنية بنظام MySQL.
بعدها سنقوم بإضافة بيانات موظف جديد في جدول خاص بالموظفين إسمه employee
.
// هنا قمنا بإستدعاء الكلاسات و الإنترفيسات التي سنستخدمها للتعامل مع قاعدة البيانات 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 ...