חילוץ מטא נתונים של מסדי נתונים באמצעות JDBC

1. סקירה כללית

JDBC מספק API של Java לקריאת הנתונים בפועל המאוחסנים בטבלאות מסדי נתונים. מלבד זאת, אותו ממשק API יכול לשמש גם לקריאת מטא נתונים על מסד הנתונים. מטא-נתונים פירושם נתונים אודות הנתונים כגון שמות טבלאות, שמות עמודות וסוגי עמודות.

במדריך זה נלמד כיצד לחלץ סוגים שונים של מטה-נתונים באמצעות ה- DatabaseMetaData מִמְשָׁק.

2. DatabaseMetaData מִמְשָׁק

DatabaseMetaData הוא ממשק המספק מגוון שיטות להשגת מידע מקיף על בסיס הנתונים. מידע זה שימושי ליצירת כלי מסדי נתונים המאפשרים למשתמשים לחקור את המבנה של מסדי נתונים שונים. זה מועיל גם כאשר אנו רוצים לבדוק אם מסד הנתונים הבסיסי תומך בתכונות מסוימות או לא.

נצטרך מופע של DatabaseMetaData כדי לקבל את המידע הזה. אז בואו נראה בקוד איך נוכל להשיג זאת מ- a חיבור לְהִתְנַגֵד:

DatabaseMetaData databaseMetaData = connection.getMetaData ();

הנה ה חיבור הוא מופע של JdbcConnection. לָכֵן, getMetaData () שיטה מחזירה אובייקט של JdbcDatabaseMetaData, המיישם את DatabaseMetaData מִמְשָׁק.

בחלקים הבאים נשתמש באובייקט זה כדי להביא סוגים שונים של מטא נתונים. לאחר מכן נלמד גם כיצד לבדוק אם מסד הנתונים תומך בתכונה מסוימת.

3. מטא נתונים מטבלאות

לפעמים אנו רוצים לדעת את שמות כל הטבלאות, טבלאות המערכת או התצוגות המוגדרות על ידי המשתמש. כמו כן, ייתכן שנרצה לדעת כמה הערות הסבר על הטבלאות. כל זה יכול להיעשות באמצעות getTables () שיטת ה- DatabaseMetaData לְהִתְנַגֵד.

ראשית, בוא נראה כיצד נוכל לחלץ את שמות כל הטבלאות הקיימות המוגדרות על ידי המשתמש:

ResultSet resultSet = databaseMetaData.getTables (null, null, null, new String [] {"TABLE"}); בעוד (resultSet.next ()) {טבלה מחרוזת = resultSet.getString ("TABLE_NAME"); הערות מחרוזת = resultSet.getString ("REMARKS"); }

הנה, שני הפרמטרים הראשונים הם קָטָלוֹג ו סכֵימָה. הפרמטר השלישי לוקח תבנית של שמות טבלאות. למשל, אם אנו מספקים "CUST%", זה יכלול את כל הטבלאות ששמן מתחיל ב- "CUST". הפרמטר האחרון לוקח a חוּט מערך המכיל את סוגי הטבלאות. להשתמש שולחן לטבלאות המוגדרות על ידי המשתמש.

לאחר מכן, אם אנו רוצים לחפש טבלאות שהוגדרו על ידי המערכת, כל שעלינו לעשות הוא להחליף את סוג הטבלה ב- "לוח מערכת“:

ResultSet resultSet = databaseMetaData.getTables (null, null, null, new String [] {"TABLE SYSTEM"}); בעוד (resultSet.next ()) {String systemTableName = resultSet.getString ("TABLE_NAME"); }

לבסוף, כדי לגלות את כל התצוגות הקיימות, היינו פשוט שנה את הסוג ל- “נוף“.

4. מטא נתונים של עמודות

אנו יכולים גם לחלץ את העמודות של טבלה מסוימת באמצעות אותה DatabaseMetaData לְהִתְנַגֵד. בואו נראה את זה בפעולה:

ResultSet עמודות = databaseMetaData.getColumns (null, null, "CUSTOMER_ADDRESS", null); ואילו (column.next ()) {String columnName = column.getString ("COLUMN_NAME"); מחרוזת columnSize = column.getString ("COLUMN_SIZE"); מחרוזת סוג נתונים = column.getString ("DATA_TYPE"); מחרוזת isNullable = column.getString ("IS_NULLABLE"); מחרוזת isAutoIncrement = column.getString ("IS_AUTOINCREMENT"); }

הנה ה getColumn () שיחה מחזירה א ResultSet שנוכל לחזור ולמצוא את התיאור של כל עמודה. כל תיאור מכיל עמודות שימושיות רבות כגון COLUMN_NAME, COLUMN_SIZE, ו סוג מידע.

מלבד עמודות רגילות, אנו יכולים גם לגלות את עמודות המפתח הראשיות של טבלה מסוימת:

ResultSet primaryKeys = databaseMetaData.getPrimaryKeys (null, null, "CUSTOMER_ADDRESS"); בעוד (primaryKeys.next ()) {String primaryKeyColumnName = primaryKeys.getString ("COLUMN_NAME"); מחרוזת primaryKeyName = primaryKeys.getString ("PK_NAME"); }

באופן דומה, אנו יכולים לאחזר את התיאור של עמודות המפתח הזר יחד עם עמודות המפתח הראשיות שהטבלה נתונה אליהן. בואו נראה דוגמה:

ResultSet foreignKeys = databaseMetaData.getImportedKeys (null, null, "CUSTOMER_ADDRESS"); בעוד (foreignKeys.next ()) {String pkTableName = foreignKeys.getString ("PKTABLE_NAME"); מחרוזת fkTableName = foreignKeys.getString ("FKTABLE_NAME"); מחרוזת pkColumnName = foreignKeys.getString ("PKCOLUMN_NAME"); מחרוזת fkColumnName = foreignKeys.getString ("FKCOLUMN_NAME"); }

הנה ה כתובת הלקוח בטבלה יש עמודת מפתח זר CUST_ID המתייחס ל תְעוּדַת זֶהוּת העמודה של צרכן שולחן. קטע הקוד שלעיל יפיק את "CUSTOMER" כטבלה הראשית ו- "CUSTOMER_ADDRESS" כטבלה זרה.

בחלק הבא נראה כיצד להביא את המידע אודות שם המשתמש ושמות הסכימה הזמינים.

5. שם משתמש ומטא נתונים של סכמות

אנו יכולים גם לקבל את שם המשתמש שבאישוריו נעשה שימוש בעת אחזור חיבור מסד הנתונים:

מחרוזת userName = databaseMetaData.getUserName ();

בדומה לכך, אנחנו יכולים להשתמש בשיטה getSchemas () כדי לאחזר את שמות הסכמות הזמינות במסד הנתונים:

סכימות ResultSet = databaseMetaData.getSchemas (); בעוד (schemas.next ()) {טבלה מחרוזת = schemas.getString ("TABLE_SCHEM"); מחרוזת table_catalog = schemas.getString ("TABLE_CATALOG"); }

בחלק הבא נראה כיצד להביא מידע שימושי אחר על מסד הנתונים.

6. מטא נתונים ברמת מסד הנתונים

כעת, בואו נראה כיצד ניתן להשיג את המידע ברמת מסד הנתונים באמצעות אותו DatabaseMetaData לְהִתְנַגֵד.

למשל, אנו יכולים להביא את השם והגרסה של מוצר מסד הנתונים, את שם מנהל ההתקן JDBC, את מספר הגרסה של מנהל ההתקן JDBC, וכן הלאה. בואו נסתכל עכשיו על קטע הקוד:

מחרוזת productName = databaseMetaData.getDatabaseProductName (); מחרוזת productVersion = databaseMetaData.getDatabaseProductVersion (); מחרוזת driverName = databaseMetaData.getDriverName (); מחרוזת driverVersion = databaseMetaData.getDriverVersion ();

ידיעה של מידע זה יכולה לפעמים להיות שימושית, במיוחד כאשר יישום פועל כנגד מספר גרסאות של מוצרי מסד נתונים. למשל, גרסה או מוצר מסוים עשויים לחסור תכונה מסוימת או להכיל באג שבו היישום צריך ליישם פיתרון כלשהו.

לאחר מכן נראה כיצד נוכל לדעת אם בסיס הנתונים חסר או תומך בתכונה מסוימת.

7. מטא נתונים הנתמכים על מאגר נתונים נתמכים

מאגרי מידע שונים תומכים בתכונות שונות. לדוגמה, H2 אינו תומך בהצטרפות חיצונית מלאה, בעוד MySQL כן.

אז איך נוכל לברר אם מסד הנתונים בו אנו משתמשים תומך בתכונה מסוימת או לא? בואו נראה כמה דוגמאות:

תומך בוליאניFullOuterJoins = databaseMetaData.supportsFullOuterJoins (); בוליאני supportsStoredProcedures = databaseMetaData.supportsStoredProcedures (); תומך בוליאני Transactions = databaseMetaData.supportsTransactions (); תומך בוליאני BatchUpdates = databaseMetaData.supportsBatchUpdates ();

כמו כן, ניתן למצוא בתיעוד הרשמי של Java את הרשימה המלאה של התכונות הניתנות לשאילתות.

8. מסקנה

במאמר זה למדנו כיצד להשתמש ב- DatabaseMetaData ממשק לאחזור מטא נתונים ותכונות נתמכות של מסד נתונים.

קוד המקור השלם של הפרויקט, כולל כל דגימות הקוד המשמשות כאן, ניתן למצוא באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found