Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

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

  • مقدمة
  • دوال الإنترفيس ResultSetMetaData
  • مثال شامل

مقدمة

الإنترفيس ResultSetMetaData يستخدم لمعرفة معلومات تتعلق بالجدول ( أو الجداول ) المخزنة في كائن الـ ResultSet, مثل:

  • أسماء الجداول المخزنة فيه.
  • عدد الأعمدة المخزنة فيه.
  • أسماء الأعمدة المخزنة فيه.
  • أنواع البيانات التي يمكن تخزينها في الأعمدة إلخ..

للحصول على كائن ResultSetMetaData نستدعي الدالة getMetaData() من كائن الـ ResultSet.


بناؤه

public interface ResultSetMetaData
extends Wrapper
public interface ResultSetMetaData extends Wrapper

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

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

الدالة مع تعريفها
1 public int getColumnCount() ترجع عدد الأعمدة الموجودة في كائن الـ ResultSet.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
2 public String getColumnName(int column) تستخدم لمعرفة أسماء الأعمدة الموجودة في كائن الـ ResultSet.
عند إستدعاءها نمرر لها Index العمود الذي نريد معرفة إسمه فترجعه لنا كنص عادي.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
3 public String getTableName(int column) تستخدم لمعرفة إسم الجدول الذي أتى منه العمود الموجود في كائن الـ ResultSet.
عند إستدعاءها نمرر لها Index العمود فترجع لنا إسم الجدول الذي أتى منه كنص عادي.
ترجع نص فارغ "" في حال لم تستطع تحديد إسم الجدول.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
4 public String getColumnTypeName(int column) تستخدم لمعرفة نوع البيانات الموجودة في كائن الـ ResultSet.
عند إستدعاءها نمرر لها Index العمود الذي نريد معرفة نوعه.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
5 public String getColumnClassName(int column) تستخدم لمعرفة نوع البيانات المتوفر في لغة جافا و الملائم لتخزين بيانات جدول محدد موجود في كائن الـ ResultSet.
عند إستدعاءها نمرر لها Index العمود الذي نريد معرفة نوع البيانات التي يمكن تخزينها فيه, فترجعه لنا.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
6 public int getColumnDisplaySize(int column) ترجع عدد الأحرف الأقصى التي يمكن تخزينها في عمود محدد من الأعمدة الموجودة في كائن الـ ResultSet.
عند إستدعاءها نمرر لها Index العمود الذي نريد معرفة عدد الأحرف الأقصى التي يمكن تخزينها فيه.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
7 public int getPrecision(int column) ترجع عدد البيانات الأقصى التي يمكن تخزينها في عمود محدد من الأعمدة الموجودة في كائن الـ ResultSet.
عند إستدعاءها نمرر لها Index العمود الذي نريد معرفة عدد البيانات الأقصى التي يمكن تخزينها فيه, فترجعه لنا كـ int.

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

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
9 public boolean isCaseSensitive(int column) تستخدم لمعرفة ما إذا كان يهم أن نكتب إسم العمود تماماً كما هو معرف في قاعدة البيانات أم لا في حال أردنا الوصول إليه من خلال إسمه. أي للتأكد ما إذا كان يهم إذا كتبنا إسم العمود بأحرف كبيرة أو أحرف صغيرة عند تجهيز الإستعلام.
عند إستدعاءها نمرر لها Index العمود الذي نريد معرفة ما إذا كان يمكن كتابة إسمه بأحرف كبيرة أو صغيرة.
ترجع true إذا كان حجم الحرف لا يسبب مشكلة. غير ذلك ترجع false.

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

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
11 public boolean isDefinitelyWritable(int column) تستخدم لمعرفة ما إذا كانت الكتابة في عمود محدد في كائن الـ ResultSet مسموحة و مضمونة مئة في المئة أم أنه يوجد إحتمال أن لا يسمح لنا بذلك.
عند إستدعاءها نمرر لها Index العمود الذي نريد معرفة ما إذا كان من الممكن أن نكتب فيه بيانات أم لا.
ترجع true إذا كان يمكن الكتابة فيه. غير ذلك ترجع false.

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

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

مثال شامل

في المثال التالي سنفترض أننا سنقوم بالإتصال بقاعدة بيانات إسمها company تمثل قاعدة بيانات لشركة, و مبنية بنظام MySQL.
بعدها سنقوم بجلب جميع البيانات الموجودة في جدول الموظفين ( employee ) و تخزينها في كائن من الإنترفيس ResultSet.
سنفترض أن جدول الموظفين يتألف من أربعة أعمدة ( id, name, email, phone ).
بعدها سننشئ كائن من الإنترفيس ResultSetMetaData و نربطه بكائن الـ ResultSet لعرض خصائص البيانات الموجودة فيه.


Main.java
// هنا قمنا بإستدعاء الكلاسات و الإنترفيسات التي سنستخدمها للتعامل مع قاعدة البيانات
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSetMetaData;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
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","thepassword");
//// و الذي سنستخدمه لإرسال الإستعلام إلى قاعدة البيانات PreparedStatement هنا قمنا بتجهيز كائن نوعه
PreparedStatement ps = con.prepareStatement("select * from employee");
// rs هنا قمنا بإرسال الإستعلام إلى قاعدة البيانات و الذي سيرجع لنا جميع الموجودة في جدول الموظفين. بعدها قمنا بتخزين النتيجة في الكائن
ResultSet rs = ps.executeQuery();
// rs و الذي سنستخدمه لعرض خصائص البيانات الموجودة في الكائن rsmd هنا قمنا بإنشاء الكائن
ResultSetMetaData rsmd = rs.getMetaData();
// rs هنا قمنا بعرض خصائص البيانات الموجودة في الكائن
System.out.println("First column: "+rsmd.getColumnName(1)+" ("+rsmd.getColumnTypeName(1)+")");
System.out.println("Second column: "+rsmd.getColumnName(2)+" ("+rsmd.getColumnTypeName(2)+")");
System.out.println("Third column: "+rsmd.getColumnName(3)+" ("+rsmd.getColumnTypeName(3)+")");
System.out.println("Fourth column: "+rsmd.getColumnName(4)+" ("+rsmd.getColumnTypeName(4)+")");
System.out.println("------------------------------------------------------");
System.out.println("Total number of columns: "+rsmd.getColumnCount());
System.out.println("------------------------------------------------------");
System.out.println("First column is from the table : "+rsmd.getTableName(1));
System.out.println("------------------------------------------------------");
System.out.println("Is First Column have the property AUTOINCREMENT? "+rsmd.isAutoIncrement(1));
System.out.println("Is currancy the datatype of the first column? "+rsmd.isCurrency(1));
System.out.println("Is First Column have the property READONLY? "+rsmd.isReadOnly(1));
// هنا قمنا بإغلاق الإتصال مع قاعدة البيانات
con.close();
}
catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
// هنا قمنا بإستدعاء الكلاسات و الإنترفيسات التي سنستخدمها للتعامل مع قاعدة البيانات import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSetMetaData; import java.sql.ResultSet; import java.sql.PreparedStatement; 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","thepassword"); //// و الذي سنستخدمه لإرسال الإستعلام إلى قاعدة البيانات PreparedStatement هنا قمنا بتجهيز كائن نوعه PreparedStatement ps = con.prepareStatement("select * from employee"); // rs هنا قمنا بإرسال الإستعلام إلى قاعدة البيانات و الذي سيرجع لنا جميع الموجودة في جدول الموظفين. بعدها قمنا بتخزين النتيجة في الكائن ResultSet rs = ps.executeQuery(); // rs و الذي سنستخدمه لعرض خصائص البيانات الموجودة في الكائن rsmd هنا قمنا بإنشاء الكائن ResultSetMetaData rsmd = rs.getMetaData(); // rs هنا قمنا بعرض خصائص البيانات الموجودة في الكائن System.out.println("First column: "+rsmd.getColumnName(1)+" ("+rsmd.getColumnTypeName(1)+")"); System.out.println("Second column: "+rsmd.getColumnName(2)+" ("+rsmd.getColumnTypeName(2)+")"); System.out.println("Third column: "+rsmd.getColumnName(3)+" ("+rsmd.getColumnTypeName(3)+")"); System.out.println("Fourth column: "+rsmd.getColumnName(4)+" ("+rsmd.getColumnTypeName(4)+")"); System.out.println("------------------------------------------------------"); System.out.println("Total number of columns: "+rsmd.getColumnCount()); System.out.println("------------------------------------------------------"); System.out.println("First column is from the table : "+rsmd.getTableName(1)); System.out.println("------------------------------------------------------"); System.out.println("Is First Column have the property AUTOINCREMENT? "+rsmd.isAutoIncrement(1)); System.out.println("Is currancy the datatype of the first column? "+rsmd.isCurrency(1)); System.out.println("Is First Column have the property READONLY? "+rsmd.isReadOnly(1)); // هنا قمنا بإغلاق الإتصال مع قاعدة البيانات con.close(); } catch(Exception e) { System.out.println(e.getMessage()); } } }

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

First column: id (INT)
Second column: name (VARCHAR)
Third column: email (VARCHAR)
Fourth column: phone (VARCHAR)
------------------------------------------------------
Total number of columns: 4
------------------------------------------------------
First column is from the table : employee
------------------------------------------------------
Is First Column have the property AUTOINCREMENT? true
Is currancy the datatype of the first column? false
Is First Column have the property READONLY? false
First column: id (INT) Second column: name (VARCHAR) Third column: email (VARCHAR) Fourth column: phone (VARCHAR) ------------------------------------------------------ Total number of columns: 4 ------------------------------------------------------ First column is from the table : employee ------------------------------------------------------ Is First Column have the property AUTOINCREMENT? true Is currancy the datatype of the first column? false Is First Column have the property READONLY? false