Como obter todos os nomes de tabelas de um database?

Gostaria de recuperar todos os nomes de tabela de um esquema de database e, se possível, obter toda a tabela começando com um prefixo especificado.

Eu tentei usar connection.getMetaData().getTables() do JDBC, mas não funcionou em tudo.

 Connection jdbcConnection = DriverManager.getConnection("", "", ""); DatabaseMetaData m = jdbcConnection.getMetaData(); ResultSet tables = m.getTables(jdbcConnection.getCatalog(), null, "TAB_%", null); for (int i = 0; i < tables.getMetaData().getColumnCount(); i++) { System.out.println("table = " + tables.getMetaData().getTableName(i)); } 

Alguém poderia me ajudar nisso?

Você precisa iterar sobre seu ResultSet chamando next() .

Este é um exemplo do java2s.com :

 DatabaseMetaData md = conn.getMetaData(); ResultSet rs = md.getTables(null, null, "%", null); while (rs.next()) { System.out.println(rs.getString(3)); } 

A coluna 3 é o TABLE_NAME (consulte a documentação de DatabaseMetaData::getTables ).

  public void getDatabaseMetaData() { try { DatabaseMetaData dbmd = conn.getMetaData(); String[] types = {"TABLE"}; ResultSet rs = dbmd.getTables(null, null, "%", types); while (rs.next()) { System.out.println(rs.getString("TABLE_NAME")); } } catch (SQLException e) { e.printStackTrace(); } } 

Em seu problema de exemplo é passado padrão de nome de tabela na function getTables de DatabaseMetaData.

Alguns bancos de dados suportam identificador de maiúsculas, alguns suportam identificadores de letras minúsculas. Por exemplo, o oracle busca o nome da tabela em letras maiúsculas, enquanto o postgreSQL a busca em letras minúsculas.

DatabaseMetaDeta fornece um método para determinar como o database armazena identificadores, pode ser caso misto, maiúsculo, minúsculas, consulte: http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#storesMixedCaseIdentifiers ( )

Do exemplo abaixo, você pode obter todas as tabelas e visualizar o padrão de nome da tabela, se desejar apenas tabelas, remova “VIEW” da matriz TYPES.

 public class DBUtility { private static final String[] TYPES = {"TABLE", "VIEW"}; public static void getTableMetadata(Connection jdbcConnection, String tableNamePattern, String schema, String catalog, boolean isQuoted) throws HibernateException { try { DatabaseMetaData meta = jdbcConnection.getMetaData(); ResultSet rs = null; try { if ( (isQuoted && meta.storesMixedCaseQuotedIdentifiers())) { rs = meta.getTables(catalog, schema, tableNamePattern, TYPES); } else if ( (isQuoted && meta.storesUpperCaseQuotedIdentifiers()) || (!isQuoted && meta.storesUpperCaseIdentifiers() )) { rs = meta.getTables( StringHelper.toUpperCase(catalog), StringHelper.toUpperCase(schema), StringHelper.toUpperCase(tableNamePattern), TYPES ); } else if ( (isQuoted && meta.storesLowerCaseQuotedIdentifiers()) || (!isQuoted && meta.storesLowerCaseIdentifiers() )) { rs = meta.getTables( StringHelper.toLowerCase( catalog ), StringHelper.toLowerCase(schema), StringHelper.toLowerCase(tableNamePattern), TYPES ); } else { rs = meta.getTables(catalog, schema, tableNamePattern, TYPES); } while ( rs.next() ) { String tableName = rs.getString("TABLE_NAME"); System.out.println("table = " + tableName); } } finally { if (rs!=null) rs.close(); } } catch (SQLException sqlException) { // TODO sqlException.printStackTrace(); } } public static void main(String[] args) { Connection jdbcConnection; try { jdbcConnection = DriverManager.getConnection("", "", ""); getTableMetadata(jdbcConnection, "tbl%", null, null, false); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

Se você quiser usar uma API de alto nível, que esconde muita complexidade do JDBC em torno dos metadados do esquema do database, consulte este artigo: http://www.devx.com/Java/Article/32443/1954

 public static ArrayList getTablesList(Connection conn) throws SQLException { ArrayList listofTable = new ArrayList(); DatabaseMetaData md = conn.getMetaData(); ResultSet rs = md.getTables(null, null, "%", null); while (rs.next()) { if (rs.getString(4).equalsIgnoreCase("TABLE")) { listofTable.add(rs.getString(3)); } } return listofTable; }