Easiest way to obtain database metadata in Java?
It's easily done using DdlUtils:
import javax.sql.DataSource;import org.apache.ddlutils.Platform;import org.apache.ddlutils.PlatformFactory;import org.apache.ddlutils.model.Database;import org.apache.ddlutils.platform.hsqldb.HsqlDbPlatform;public void readMetaData(final DataSource dataSource) { final Platform platform = PlatformFactory.createNewPlatformInstance(dataSource); final Database database = platform.readModelFromDatabase("someName"); // Inspect the database as required; has objects like Table/Column/etc.}
Take a look at SchemaCrawler (free and open source), which is another API designed for this purpose. Some sample SchemaCrawler code:
// Create the optionsfinal SchemaCrawlerOptions options = new SchemaCrawlerOptions();// Set what details are required in the schema - this affects the// time taken to crawl the schemaoptions.setSchemaInfoLevel(SchemaInfoLevel.standard());options.setShowStoredProcedures(false);// Sorting optionsoptions.setAlphabeticalSortForTableColumns(true);// Get the schema definition // (the database connection is managed outside of this code snippet)final Database database = SchemaCrawlerUtility.getDatabase(connection, options);for (final Catalog catalog: database.getCatalogs()){ for (final Schema schema: catalog.getSchemas()) { System.out.println(schema); for (final Table table: schema.getTables()) { System.out.print("o--> " + table); if (table instanceof View) { System.out.println(" (VIEW)"); } else { System.out.println(); } for (final Column column: table.getColumns()) { System.out.println(" o--> " + column + " (" + column.getType() + ")"); } } }}