I am acquainted with the java.sql.DatabaseMetaData interface, however i think it is quite cumbersome to make use of. For instance, to be able to discover the table names, you need to call getTables and loop with the came back ResultSet, using well-known literals because the column names.

Can there be an simpler method to obtain database metadata?

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.

Have a look at SchemaCrawler (free and free), that is another API designed for this function. Some sample SchemaCrawler code:

    // 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
// Sorting options

// Get the schema definition
final Database database = SchemaCrawlerUtility.getDatabase(dataSource
  .getConnection(), options);

for (final Catalog catalog: database.getCatalogs())
  for (final Schema schema: catalog.getSchemas())
    for (final Table table: schema.getTables())
      System.out.print("o--> " + table);
      if (table instanceof View)
        System.out.println(" (VIEW)");

      for (final Column column: table.getColumns())
        System.out.println("     o--> " + column + " (" + column.getType()
                           + ")");