我需要在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)数据库中的表吗?
编辑 b>:我环顾四周,开始感觉这可能是一个普通的JDBC问题。换句话说,我们可以枚举一个数据库的表,并且可以从Connection对象中检索DatabaseMetaData对象。展望(并期待回应)......
编辑2 b>:我发现了一个纯粹的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);
}