¿Cómo obtener todos los nombres de tabla de una base de datos?

Me gustaría recuperar todos los nombres de tabla de un esquema de base de datos y, si es posible, obtener toda la tabla comenzando con un prefijo especificado.

Intenté usar connection.getMetaData().getTables() JDBC, pero no funcionó en absoluto.

 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)); } 

Puede alguien ayudarme con esto?

Necesitas iterar sobre tu ResultSet llamando a next() .

Este es un ejemplo de java2s.com :

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

La columna 3 es TABLE_NAME (ver documentación 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(); } } 

En su problema de ejemplo, se pasa el patrón de nombre de tabla en la función getTables de DatabaseMetaData.

Algunas bases de datos admiten el identificador de mayúsculas, algunas admiten identificadores de minúsculas. Por ejemplo, oracle obtiene el nombre de la tabla en mayúsculas, mientras que postgreSQL lo busca en minúsculas.

DatabaseMetaDeta proporciona un método para determinar cómo la base de datos almacena identificadores, puede ser mayúsculas, mayúsculas y minúsculas. Consulte: http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#storesMixedCaseIdentifiers ( )

A partir del ejemplo siguiente, puede obtener todas las tablas y vistas para proporcionar el patrón del nombre de la tabla, si solo desea tablas, entonces elimine “VIEW” de la 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(); } } } 

Si desea utilizar una API de alto nivel, que oculta gran parte de la complejidad de JDBC en torno a los metadatos del esquema de la base de datos, consulte este artículo: 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; }