私はjava.sql.DatabaseMetaData
インターフェイスに精通していますが、私はそれを使用するには非常にclunkyを見つける。たとえば、テーブル名を調べるには、getTables
を呼び出して、よく知られているリテラルを列名として使用して、返されたResultSet
をループする必要があります。Javaでデータベースメタデータを取得する最も簡単な方法は?
データベースメタデータを取得する簡単な方法はありますか?
私はjava.sql.DatabaseMetaData
インターフェイスに精通していますが、私はそれを使用するには非常にclunkyを見つける。たとえば、テーブル名を調べるには、getTables
を呼び出して、よく知られているリテラルを列名として使用して、返されたResultSet
をループする必要があります。Javaでデータベースメタデータを取得する最も簡単な方法は?
データベースメタデータを取得する簡単な方法はありますか?
これは、簡単に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.
}
は、この目的のために設計された別のAPIである、SchemaCrawlerは(フリーかつオープンソース)を見てみましょう。いくつかのサンプルSchemaCrawlerはコード:
// Create the options
final SchemaCrawlerOptions options = new SchemaCrawlerOptions();
// Set what details are required in the schema - this affects the
// time taken to crawl the schema
options.setSchemaInfoLevel(SchemaInfoLevel.standard());
options.setShowStoredProcedures(false);
// Sorting options
options.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()
+ ")");
}
}
}
}
あなたが接続を自分で閉じる必要がありますかgetDatabase()メソッドは、あなたのためにそれを行うんですか? –
@AndrewSwan - SchemaCrawlerは接続を閉じません。あなたはそれを自分で閉じる必要があります。 –
その場合、finallyブロックの接続を閉じるようにサンプルを更新したいかもしれませんか? –