我需要在 Java 程序中使用 JDBC 枚举 Derby(又名 Java DB)数据库中的表。我所知道的只是 SHOW TABLES 命令。
我首先尝试了类似的东西......
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!");
}
...但这会引发异常:
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "SHOW" at line 1, column 1.
所以接下来我想也许我需要使用 CallableStatement 所以我尝试了这个......
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!");
}
...但这会引发相同的异常:
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "SHOW" at line 1, column 1.
那么,谁能帮我从 JDBC 枚举我的 Derby(Java DB)数据库中的表?
编辑:我环顾四周,开始觉得这可能是一个一般的 JDBC 问题。换句话说,可以/将使用可以从 Connection 对象中检索到的 DatabaseMetaData 对象来枚举所有 db 的表。对此进行调查(并期待回复)......
编辑 2:我找到了一个纯 JDBC 解决方案,但仍然很高兴听到替代方案......
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);
}