l'appel de derby (java db) "show tables" à partir de jdbc

J'ai besoin d'énumérer les tables dans un Derby (aka Java DB) de la base de données à l'aide de JDBC dans un programme Java. Tout ce que je suis au courant pour le faire, c'est la commande SHOW TABLES.

J'ai d'abord essayé avec quelque chose de semblable à ce...

String strConnectionURL = "jdbc:derby:/path/to/derby/database;create=false";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(strConnectionURL);
Statement statement = connection.createStatement();
boolean boResult = statement.execute("SHOW TABLES");
if (boResult) {
    System.out.println("yay!");
}

...mais qui lève une exception:

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "SHOW" at line 1, column 1.

Donc ensuite, j'ai pensé que peut-être j'avais besoin d'utiliser un CallableStatement j'ai donc essayé cette...

String strConnectionURL = "jdbc:derby:/path/to/derby/db;create=false";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(strConnectionURL);
CallableStatement statement = connection.prepareCall("SHOW TABLES");
boolean boResult = statement.execute();
if (boResult) {
    System.out.println("yippee!");
}

...mais ça en jette la même exception:

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "SHOW" at line 1, column 1.

Donc, quelqu'un peut-il m'aider à énumérer les tables de mon Derby (Java DB) de la base de données à partir de JDBC?

MODIFIER: je suis à la recherche autour de et de départ pour obtenir un sentiment cela peut être un général JDBC question. En d'autres termes, on pourrait/serait énumérer tous un db de tables avec le DatabaseMetaData de l'objet qui peut être récupéré à partir de l'objet de Connexion. La recherche dans ce (et hâte de réponses)...

EDIT 2: j'ai trouvé un pur JDBC solution, mais je suis toujours heureux d'entendre d'autres solutions...

String strConnectionURL = "jdbc:derby:/path/to/db;create=false";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(strConnectionURL);
DatabaseMetaData dbmd = connection.getMetaData();
ResultSet resultSet = dbmd.getTables(null, null, null, null);
while (resultSet.next()) {
    String strTableName = resultSet.getString("TABLE_NAME");
    System.out.println("TABLE_NAME is " + strTableName);
}

OriginalL'auteur John Fitzpatrick | 2011-09-14