English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

نتائج JDBC (ResultSet)

تعود جملة SQL لقراءة البيانات من الاستعلام إلى البيانات في مجموعة النتائج. هي طريقة استاندارد لاختيار السطور من قاعدة البيانات وتحليلها في مجموعة النتائج. يُمثل واجهة Sql.ResultSet نتائج استعلام قاعدة البيانات.

يحافظ ResultSet على مآل السطر الحالي في مجموعة النتائج. ويُشار إلى مصطلح “مجموعة النتائج” بأنه بيانات السطور والأعمدة الموجودة في ResultSet.

يمكن تقسيم طرق ResultSet إلى ثلاثة أنواع-

  • طرق التصفح: للمتحرك إلى اليسار واليمين.

  • طريقة Get: للنظر في بيانات الأعمدة في السطر الحالي الذي يشير إليه الحاسمة.

  • طريقة Update:لتحديث بيانات كل عمود في السطر الحالي. يمكن أيضًا تحديث التحديث في قاعدة البيانات الأساسية.

يمكن للحاسمة التدول بناءً على خصائص ResultSet. هذه الخصائص يتم تحديدها عند إنشاء Statement الذي يولد ResultSet المطلوب.

يقدم JDBC طريقة الاتصال التالية لإنشاء جملة تحتوي على ResultSet المطلوب-

  • createStatement(int RSType, int RSConcurrency);

  • prepareStatement(String SQL, int RSType, int RSConcurrency);

  • prepareCall(String sql, int RSType, int RSConcurrency);

الرقم الأول يمثل نوع ResultSet، والرقم الثاني هو إحدى الثوابت ResultSet، ويُستخدم لتعيين ما إذا كانت مجموعة النتائج قابلة للقراءة فقط أو قابلة للتحديث.

نوع النتائج

الأنواع المحتملة من RSType كما هو موضح أدناه. إذا لم تُحدد أي نوع ResultSet، فسيتم منحك تلقائيًا نوع TYPE_FORWARD_ONLY.

النوعوصف
ResultSet.TYPE_FORWARD_ONLY

يمكن للحاسمة التدول للأمام فقط في مجموعة النتائج.

ResultSet.TYPE_SCROLL_INSENSITIVE

يستطيع الماوس التدول للأمام والخلف، ويفترض أن تكون النتائج غير حساسة بشكل كبير للتعديلات التي يقوم بها الآخرون على قاعدة البيانات بعد إنشاء مجموعة النتائج.

ResultSet.TYPE_SCROLL_SENSITIVE.

يستطيع الماوس التدول للأمام والخلف، ويفترض أن تكون النتائج الحساسة بشكل كبير للغاية للتعديلات التي يقوم بها الآخرون على قاعدة البيانات بعد إنشاء مجموعة النتائج.

التعاون في ResultSet

الأنواع المحتملة لـ RSConcurrency فيما يلي. إذا لم تُحدد أي نوع تعاون، فإن النوع الافتراضي سيكون CONCUR_READ_ONLY.

التعاونوصف
ResultSet.CONCUR_READ_ONLY

إنشاء مجموعة نتائج قارئة. هذا هو القيمة الافتراضية

ResultSet.CONCUR_UPDATABLE

إنشاء مجموعة نتائج قابلة للتحديث.

حتى الآن، جميع الأمثلة التي كتبناها يمكن كتابتها كما يلي، حيث يتم إنشاء Statement لإنشاء ResultSet القارئ فقط-

try {
   Statement stmt = conn.createStatement(
                           ResultSet.TYPE_FORWARD_ONLY,
                           ResultSet.CONCUR_READ_ONLY);
}
catch(Exception ex) {
   ....
}
finally {
   ....
}

توجيه مجموعة النتائج

يوجد عدة طرق في واجهة ResultSet تتعلق بتحريك المؤشر، بما في ذلك-

رقمالطريقة والشرح
1public void beforeFirst() throws SQLException

تحريك مؤشر النص إلى قبل السطر الأول.

2public void afterLast() throws SQLException

تحريك مؤشر النص إلى بعد السطر الأخير.

3public boolean first() throws SQLException

تحريك مؤشر النص إلى السطر الأول.

4public void last() throws SQLException

تحريك مؤشر النص إلى السطر الأخير.

5public boolean absolute(int row) throws SQLException

تحريك مؤشر النص إلى السطر المحدد.

6public boolean relative(int row) throws SQLException

تحريك مؤشر النص للأمام أو الخلف بمقدار السطور المحددة، من الموضع الحالي الذي يشير إليه.

7public boolean previous() throws SQLException

تحريك مؤشر النص إلى السطر السابق. إذا لم يكن السطر السابق في مجموعة النتائج، فإن هذه الطريقة تعود false.

8public boolean next() throws SQLException

تحريك مؤشر النص إلى السطر التالي. إذا لم يكن هناك سطور أخرى في مجموعة النتائج، فإن هذه الطريقة تعود false.

9public int getRow() throws SQLException

يعيد رقم الصف الذي يشير إليه المؤشر.

10public void moveToInsertRow() throws SQLException

انقل المؤشر إلى الصف الخاص في مجموعة النتائج، والذي يمكن استخدامه لإدراج صف جديد في قاعدة البيانات. تذكر موقع المؤشر الحالي.

11public void moveToCurrentRow() throws SQLException

إذا كان المؤشر الحالي في صف الإدراج، فأرجع المؤشر إلى الصف الحالي؛ وإلا لا يقوم هذا الطريقة بأي عمل.

للتفهم بشكل أفضل، دعونا ندرس “تحريك - مثال على الكود.

مراجعة مجموعة النتائج

يحتوي واجهة ResultSet على العديد من الطرق للحصول على بيانات الصف الحالي.

لدي كل نوع بيانات طريقة get، وكل طريقة get لها نسختين -

  • عمود يحتوي على اسم العمود.

  • مؤشر يحتوي على معرف عمود.

على سبيل المثال، إذا كان العمود الذي تهمه يحتوي على عدد صحيح، فإنك بحاجة إلى استخدام طريقة getInt() من ResultSet.

رقمالطريقة والشرح
1public int getInt(String columnName) throws SQLException

يعيد قيمة int في الصف الحالي للعمود المسمى columnName.

2public int getInt(int columnIndex) throws SQLException

يعيد قيمة عدد صحيح في الصف الحالي من العمود المحدد بالمعرف. يبدأ معرف العمود من 1، مما يعني أن العمود الأول في الصف هو 1، والعمود الثاني هو 2، وهكذا.

بالنسبة لكل نوع من أنواع البيانات الأساسية الثمانية في واجهة ResultSet، بالإضافة إلى الأنواع الشائعة (مثل java.lang.String، java.lang.Object و java.net.URL)، هناك طرق get.

هناك أيضًا طرق للحصول على أنواع البيانات SQL مثل java.sql.Date، java.sql.Time، java.sql.Timestamp، java.sql.Clob و java.sql.Blob. راجع المستندات للحصول على معلومات إضافية حول استخدام هذه أنواع البيانات SQL.

للتفهم بشكل أفضل، دعونا ندرسمراجعة - مثال على الكود.

تحديث مجموعة النتائج

يحتوي واجهة ResultSet على مجموعة من الطرق لتحديث بيانات مجموعة النتائج.

مثل طريقة get، لدى كل نوع بيانات طريقتين لتحديثها -

  • عمود يحتوي على اسم العمود.

  • مؤشر يحتوي على معرف عمود.

على سبيل المثال، لتعديل عمود String في الصف الحالي من مجموعة النتائج، يمكنك استخدام أحد طرق updateString() التالية -

رقمالطريقة والشرح
1public void updateString(int columnIndex, String s) throws SQLException

غير قيمة الأعمدة المحددة إلى قيمة s.

2public void updateString(String columnName, String s) throws SQLException

مثل الطرق السابقة، ولكن الأعمدة يتم تحديد اسمها وليس المؤشر.

يوجد ثمانية أنواع بيانات قياسية وأجهزة تعريف مثل String،Object،URL وأنواع البيانات SQL في حزمة java.sql مع طرق التحديث.

تحديث سطر في نتائج الجلسة سيغير الأعمدة فيResultSet لسطر الحالي، ولكن لن يغير السطر في قاعدة البيانات الأساسية. لتحديث التغييرات في السطر في قاعدة البيانات، يجب عليك طلب واحدة من الطرق التالية.

رقمالطريقة والشرح
1public void updateRow()

تحديث السطر الحالي من خلال تحديث السطر المحدد في قاعدة البيانات.

2public void deleteRow()

حذف السطر الحالي من قاعدة البيانات.

3public void refreshRow()

تحديث البيانات في نتائج الجلسة ليعكس أي تغييرات حديثة في قاعدة البيانات.

4public void cancelRowUpdates()

إلغاء أي تحديثات قيد التنفيذ على السطر الحالي.

5public void insertRow()

إدراج سطر في قاعدة البيانات. يمكن طلب هذه الطريقة فقط عندما يكون السطر المحدد في حالة الإدراج.

للتفهم بشكل أفضل، دعونا ندرس “تحديث الكود المثال.