Java DB数据库,检查所有表名

时间:2014-05-18 18:15:29

标签: java derby

我的java应用程序中有一个embedded Derby Database,并且有多个table's(已创建和删除,因此没有任何内容)。我希望能够返回tables中当前所有database的名称列表,因为我必须在应用程序中显示列表并从中获取所有信息。

最简单的方法吗?我不需要代码只是一种方法或方法。我是一个可怕的google-fu用户。

目前我的代码的工作原理是从输入的特定表名中抓取ResultSet,但它仅用于测试目的,我需要能够显示我拥有的完整表格列表。


编辑:我目前的解决方法实际上与发布的不同。我只是有另一个table,它包含所有创建的表名,并在创建/删除一个时更新。显然不是最好的方法,但它现在适用于我。

3 个答案:

答案 0 :(得分:2)

DatabaseMetaData metaData = connection.getMetaData();
ResultSet resultSet = metaData.getTables(null, "schenaName", "%" ,new String[] {"TABLE"} );
while (resultSet.next()) {
  System.out.println(resultSet.getString(3));
}

添加新答案:

 Connection connection = getDBConnection();
 DatabaseMetaData dbMetaData = connection.getMetaData();
 //getting catalogs for mysql DB, if it is not working for your DB, try dbMetaData.getSchemas();
 ResultSet catalogs = dbMetaData.getCatalogs();
 while(catalogs.next()){
       String catalogName = catalogs.getString(1);
         //excluding table names from "mysql" schema from mysql DB.
       if(!"mysql".equalsIgnoreCase(catalogName)){
            ResultSet tables = dbMetaData.getTables(catalogName, null, null, null);
            while(tables.next()){
                 System.out.println(catalogName + "::"+tables.getString(3));
            }
        }
  }

答案 1 :(得分:0)

使用元数据是(某种程度上)更便携的解决方案。请注意,您不需要Derby的目录内容,因为没有目录。您可以直接使用null为目录发出dmd.getTables(...)。如果您跟踪的所有表都在一个模式中(并且该模式中没有任何其他表),则getTables(null," schemaName",null,null)应该可以解决问题。

如果需要更多花哨的查询并且您不关心可移植性,可以查看

dataBaseMetaData tool,它允许您以表的形式访问元数据,以便您可以对它们执行联接和其他复杂查询。

答案 2 :(得分:-1)

试试这个:

select tableName from sys.systables 

您应该获得系统的所有表格。