我的java应用程序中有一个embedded Derby Database
,并且有多个table's
(已创建和删除,因此没有任何内容)。我希望能够返回tables
中当前所有database
的名称列表,因为我必须在应用程序中显示列表并从中获取所有信息。
最简单的方法吗?我不需要代码只是一种方法或方法。我是一个可怕的google-fu用户。
目前我的代码的工作原理是从输入的特定表名中抓取ResultSet
,但它仅用于测试目的,我需要能够显示我拥有的完整表格列表。
编辑:我目前的解决方法实际上与发布的不同。我只是有另一个table
,它包含所有创建的表名,并在创建/删除一个时更新。显然不是最好的方法,但它现在适用于我。
答案 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
您应该获得系统的所有表格。