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

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

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

مقدمة

الإنترفيس DatabaseMetaData يوفر مجموعة ضخمة من الدوال التي يمكن إستخدامها لمعرفة معلومات متعلقة بقاعدة البيانات التي تتعامل معها. مثل:

  • إسم قاعدة البيانات ( Database Name ).
  • إصدار قاعدة اليبانات ( Database Version ).
  • رابط الوصول لقاعدة البيانات ( Database URL ).
  • الأوامر الموجودة في قاعدة البيانات ( Database Keywords ).
  • إسم الـ Driver المستخدم ( Driver Name ).
  • إصدار الـ Driver المستخدم ( Driver Version ).
  • أسماء الجداول الموجودة في قاعدة البيانات ( Tables Names ).
  • إسم المستخدم المتصل بقاعدة البيانات من التطبيق ( User Name ).

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


بناؤه

public interface DatabaseMetaData
extends Wrapper

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

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

الدالة مع تعريفها
1 public String getUserName() ترجع إٍسم المستخدم المعرف في قاعدة البيانات و المتصل بها حالياً من التطبيق.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
2 public String getDatabaseProductName() ترجع إسم البرنامج الذي تم بواسطته إنشاء قاعدة البيانات.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
3 public String getDatabaseProductVersion() ترجع إصدار البرنامج الذي تم بواسطته إنشاء قاعدة البيانات.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
4 public String getDriverName() ترجع إسم الـ Driver المستخدم للإتصال بقاعدة البيانات.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
5 public String getDriverVersion() ترجع إصدار الـ Driver المستخدم للإتصال بقاعدة البيانات.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
6 public String getURL() ترجع نص يمثل رابط الوصول لقاعدة البيانات أو null في حال لم تتمكن من إرجاعه.

ترمي الإستثناء SQLException في حال حدث خطأ عند محاولة الإتصال بقاعدة البيانات.
7 public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) ترجع وصف لجميع الجداول الموجودة في كاتالوج قاعدة البيانات ككائن من الكلاس ResultSet.كل سطر ترجعه يمثل معلومات جدول محدد.

يمكنك وضع null مكان أي باراميتر في حال كنت لا تعرف ماذا يجب أن تضع.
مكان الباراميتر tableNamePattern يمكنك تحديد الجدول الذي تريد إرجاع وصف له.
مكان الباراميتر types يمكنك تحديد أنواع الجداول التي تريد إرجاع وصف لها.

يتم ترتيب معلومات الأعمدة الموجودة في كل جدول كالتالي:
  1. TABLE_CAT و هو نص يمثل كاتالوج الجدول.
  2. TABLE_SCHEM و هو نص يمثل الـ schema و التي هي عبارة عن مجموعة كائنات تمثل قاعدة البيانات المرتبط بها مستخدم معين.
  3. TABLE_NAME و هو نص يمثل أسماء الجداول الموجودة في قاعدة البيانات.
  4. TABLE_TYPE و هو نص يمثل نوع الجدول و الذي يمكن أن يكون إحدى الأنواع التالية:
        (TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY, LOCAL TEMPORARY, ALIAS, SYNONYM).
  5. REMARKS و هو نص يمثل التعليقات الموضوعة في الجدول.
  6. TYPE_CAT و هو نص يمثل نوع الكاتالوج.
  7. TYPE_SCHEM و هو نص يمثل نوع الـ schema.
  8. TYPE_NAME و هو نص يمثل إسم النوع.
  9. SELF_REFERENCING_COL_NAME.
  10. REF_GENERATION.

ملاحظة: بعض قواعد البيانات لا ترجع معلومات حول جميع الجداول الموجودة فيها.

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

مثال شامل

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

  • إسم و إصدار الـ Driver الذي إستخدمناه للإتصال بقاعدة البيانات.
  • إسم و إصدار البرنامج الذي إستخدمناه لبناء قاعدة البيانات من الأساس.
  • إسم المستخدم المتصل بقاعدة البيانات من البرنامج.
  • رابط الوصول لقاعدة البيانات التي نتعامل معها.
  • أسماء جميع الجداول الموجودة في قاعدة البيانات.

Main.java
// هنا قمنا بإستدعاء الكلاسات و الإنترفيسات التي سنستخدمها للتعامل مع قاعدة البيانات
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
 
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");
 
            // و الذي سنستخدمه للحصول على معلومات تتعلق بقاعدة البيانات التي نتعامل معها DatabaseMetaData هنا قمنا بتجهيز كائن نوعه
            DatabaseMetaData dbmd = con.getMetaData();
 
            // DatabaseMetaData هنا قمنا بعرض بعض المعلومات التي يمكننا معرفتها من خلال كائن الـ
            System.out.println("Driver Name:" +dbmd.getDriverName() );
            System.out.println("Driver Version:" +dbmd.getDriverVersion() );
            System.out.println("User Name:" +dbmd.getUserName() );
            System.out.println("Database URL:" +dbmd.getURL() );
            System.out.println("Database Product Name:" +dbmd.getDatabaseProductName() );
            System.out.println("Databse Product Version:" +dbmd.getDatabaseProductVersion() );
 
            // الموجودين في قاعدة البيانات (TABLES) حتى ترجع لنا فقط أسماء الجداول getTables() في الدالة argument هنا قمنا بتجهيز هذه المصفوفة لأننا سنمررها كـ
            String table[]={"TABLE"};
 
            // rs هنا قمنا بجلب جميع المعلومات المتوفرة حول الجداول الموجودة في قاعدة البيانات, بعدها قمنا بتخزينهم في الكائن
            ResultSet rs = dbmd.getTables(null, null, null ,table);
 
            System.out.println("\nDatabse Tables names:");
 
            // rs هنا أنشأنا حلقة تمر على جميع الأسطر التي تم تخزينها في الكائن
            while(rs.next()) {
                // rs هنا في كل دورة سيتم عرض إسم جدول من الأسماء الموجودة في الكائن
                System.out.println("- " + rs.getString(3));
            }
 
            // هنا قمنا بإغلاق الإتصال مع قاعدة البيانات
            con.close();
        }
        catch(Exception e) {
            System.out.println(e.getMessage());
        }
 
    }
 
}

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

Driver Name: MySQL Connector Java
Driver Version: mysql-connector-java-5.1.40 ( Revision: 402933ef52cad9aa82624e80acbea46e3a701ce6 )
UserName: root@localhost
Databse URL: jdbc:mysql://localhost:3306/company
Database Product Name: MySQL
Database Product Version: 5.6.17

Databse Tables names:
- employee
- customers
- orders
- projects
- departements