Adatbázis-metaadatok kinyerése a JDBC használatával

1. Áttekintés

A JDBC Java API-t biztosít az adatbázis-táblákban tárolt tényleges adatok beolvasására. Emellett ugyanaz az API használható az adatbázis metaadatainak olvasására is. A metaadatok olyan adatokra vonatkoznak, mint a táblák, oszlopok neve és oszloptípusok.

Ebben az oktatóanyagban megtudhatjuk, hogyan lehet különféle metaadatokat kinyerni a DatabaseMetaData felület.

2. DatabaseMetaData Felület

DatabaseMetaData olyan felület, amely számos módszert kínál az adatbázisról átfogó információk megszerzéséhez. Ez az információ hasznos olyan adatbázis-eszközök létrehozásához, amelyek lehetővé teszik a felhasználók számára a különböző adatbázisok felépítésének feltárását. Akkor is hasznos, ha ellenőrizni akarjuk, hogy az alapul szolgáló adatbázis támogat-e bizonyos funkciókat.

Szükségünk lesz egy példányra DatabaseMetaData hogy megkapja ezeket az információkat. Tehát nézzük meg kódban, hogyan szerezhetjük ezt az Kapcsolat tárgy:

DatabaseMetaData databaseMetaData = connection.getMetaData ();

Itt a kapcsolat példánya JdbcConnection. Ebből kifolyólag, getMetaData () metódus adja vissza a JdbcDatabaseMetaData, amely végrehajtja a DatabaseMetaData felület.

A következő szakaszokban ezt az objektumot használjuk különböző típusú metaadatok lekérésére. Utána azt is megtanuljuk, hogyan lehet ellenőrizni, hogy az adatbázis támogatja-e egy adott funkciót.

3. Táblázatok metaadatai

Néha meg akarjuk tudni az összes felhasználó által definiált tábla, rendszertábla vagy nézet nevét. Szeretnénk tudni néhány magyarázó megjegyzést a táblázatokról. Mindez a getTables () módszere DatabaseMetaData tárgy.

Először nézzük meg, hogyan tudjuk kibontani az összes létező, felhasználó által definiált táblázat nevét:

ResultSet resultSet = databaseMetaData.getTables (null, null, null, new String [] {"TABLE"}); while (resultSet.next ()) {String tableName = resultSet.getString ("TABLE_NAME"); Karakterlánc megjegyzések = resultSet.getString ("MEGJEGYZÉSEK"); }

Itt van az első két paraméter katalógus és séma. A harmadik paraméter a táblák nevének mintáját veszi fel. Például, ha megadjuk a „CUST%” értéket, akkor ez magában foglalja az összes táblázatot, amelynek neve „CUST” betűvel kezdődik. Az utolsó paraméter a Húr tömb, amely a táblák típusait tartalmazza. Használat ASZTAL a felhasználó által definiált táblákhoz.

Ezután, ha rendszer által definiált táblákat akarunk keresni, akkor csak annyit kell tennünk, hogy a táblatípust lecseréljük a következőre:RENDSZERTÁBLÁZAT“:

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

Végül az összes létező nézet megismeréséhez egyszerűen meg kellene tennünk módosítsa a típust “KILÁTÁS“.

4. Oszlopok metaadatai

Ugyanezzel is kivonhatjuk egy adott táblázat oszlopait DatabaseMetaData tárgy. Lássuk ezt működés közben:

ResultSet oszlopok = databaseMetaData.getColumns (null, null, "CUSTOMER_ADDRESS", null); while (oszlopok.next ()) {Karakterlánc oszlopNév = oszlopok.getString ("COLUMN_NAME"); Karakterlánc columnSize = oszlopok.getString ("COLUMN_SIZE"); Karakterlánc adattípus = oszlopok.getString ("DATA_TYPE"); String isNullable = oszlopok.getString ("IS_NULLABLE"); Karakterlánc isAutoIncrement = oszlopok.getString ("IS_AUTOINCREMENT"); }

Itt a getColumns () hívás visszatér a ResultSet hogy iterálva megtalálhatjuk az egyes oszlopok leírását. Minden leírás számos hasznos oszlopot tartalmaz, például COLUMN_NAME, COLUMN_SIZE, és ADATTÍPUS.

A szokásos oszlopok mellett megtudhatjuk egy adott táblázat elsődleges kulcsoszlopait is:

ResultSet primaryKeys = databaseMetaData.getPrimaryKeys (null, null, "CUSTOMER_ADDRESS"); while (primerKeys.next ()) {String primaryKeyColumnName = primaryKeys.getString ("COLUMN_NAME"); String primaryKeyName = primaryKeys.getString ("PK_NAME"); }

Hasonlóképpen megkaphatjuk az idegen kulcs oszlopok leírását, valamint az adott táblázat által hivatkozott elsődleges kulcs oszlopokat. Lássunk egy példát:

ResultSet ForeignKeys = databaseMetaData.getImportedKeys (null, null, "CUSTOMER_ADDRESS"); while (külföldiKeys.next ()) {Karakterlánc pkTableName = idegenKeys.getString ("PKTABLE_NAME"); String fkTableName = ForeignKeys.getString ("FKTABLE_NAME"); Karakterlánc pkColumnName = ForeignKeys.getString ("PKCOLUMN_NAME"); String fkColumnName = ForeignKeys.getString ("FKCOLUMN_NAME"); }

Itt a CUSTOMER_ADDRESS táblázatban van egy idegen kulcs oszlop CUST_ID hogy hivatkozik a ID oszlop VEVŐ asztal. A fenti kódrészletből a „CUSTOMER” lesz az elsődleges táblázat, a „CUSTOMER_ADDRESS” pedig a külföldi tábla.

A következő szakaszban megnézzük, hogyan lehet lekérni a felhasználónévre és az elérhető séma nevekre vonatkozó információkat.

5. Felhasználónév és sémák metaadatai

Megkaphatjuk annak a felhasználónak a nevét is, akinek hitelesítő adatait használtuk az adatbázis-kapcsolat lekérése közben:

Karakterlánc userName = databaseMetaData.getUserName ();

Hasonlóképpen, használhatjuk a módszert getSchemas () az elérhető sémák nevének lekéréséhez az adatbázisban:

ResultSet sémák = databaseMetaData.getSchemas (); while (schemas.next ()) {String table_schem = schemas.getString ("TABLE_SCHEM"); Karakterlánc tábla_katalógus = schemas.getString ("TABLE_CATALOG"); }

A következő szakaszban megtudjuk, hogyan lehet további hasznos információkat beolvasni az adatbázisról.

6. Adatbázis szintű metaadatok

Most nézzük meg, hogyan lehet ugyanezzel az adatbázis-szintű információt megszerezni DatabaseMetaData tárgy.

Például lekérhetjük az adatbázis-termék nevét és verzióját, a JDBC illesztőprogram nevét, a JDBC illesztőprogram verziószámát és így tovább. Most nézzük meg a kódrészletet:

String termékNév = databaseMetaData.getDatabaseProductName (); String productVersion = databaseMetaData.getDatabaseProductVersion (); String driverName = adatbázisMetaData.getDriverName (); String driverVersion = databaseMetaData.getDriverVersion ();

Ezen információk ismerete néha hasznos lehet, különösen akkor, ha egy alkalmazás több adatbázis-termékkel és verzióval fut. Például egy bizonyos verzióból vagy termékből hiányozhat egy adott szolgáltatás, vagy hibát tartalmazhat, ha az alkalmazásnak valamilyen megoldást kell végrehajtania.

Ezután meglátjuk, hogyan lehet megismerni, ha az adatbázisból hiányzik vagy támogat egy adott funkciót.

7. Támogatott adatbázis-szolgáltatások metaadatai

A különböző adatbázisok különböző funkciókat támogatnak. Például a H2 nem támogatja a teljes külső csatlakozásokat, míg a MySQL igen.

Tehát hogyan lehet megtudni, hogy az általunk használt adatbázis támogat-e egy bizonyos funkciót vagy sem? Lássunk néhány példát:

logikai támogatásFullOuterJoins = databaseMetaData.supportsFullOuterJoins (); logikai támogatjaStoredProcedures = databaseMetaData.supportsStoredProcedures (); logikai támogatásTransactions = databaseMetaData.supportsTransactions (); logikai támogatásokBatchUpdates = databaseMetaData.supportsBatchUpdates ();

Ezenkívül a lekérdezhető szolgáltatások teljes listája megtalálható a hivatalos Java dokumentációban.

8. Következtetés

Ebben a cikkben megtanultuk a DatabaseMetaData felület az adatbázis metaadatainak és támogatott szolgáltatásainak letöltéséhez.

A projekt teljes forráskódja, beleértve az itt használt összes kódmintát, megtalálható a GitHub oldalon.


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