How to get all table names from a database? How to get all table names from a database? database database

How to get all table names from a database?


You need to iterate over your ResultSet calling next().

This is an example from java2s.com:

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

Column 3 is the TABLE_NAME (see documentation of 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();        }    }


In your example problem is passed table name pattern in getTables function of DatabaseMetaData.

Some database supports Uppercase identifier, some support lower case identifiers. For example oracle fetches the table name in upper case, while postgreSQL fetch it in lower case.

DatabaseMetaDeta provides a method to determine how the database stores identifiers, can be mixed case, uppercase, lowercase see:http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#storesMixedCaseIdentifiers()

From below example, you can get all tables and view of providing table name pattern, if you want only tables then remove "VIEW" from TYPES array.

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