En el problema de ejemplo se pasa patrón de nombre en la función getTables de DatabaseMetaData.
Algunas bases de datos admiten identificador de mayúsculas, algunos admiten identificadores de minúsculas. Por ejemplo, oráculo 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 los identificadores de base de datos almacena, se pueden mezclar caso, en mayúsculas, consulte minúsculas: http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#storesMixedCaseIdentifiers()
Desde abajo ejemplo, usted puede conseguir todas las tablas y vistas de proporcionar patrón de nombre de la tabla, si solo quiere tablas y luego elimina "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();
}
}
}
Gracias! Hiciste mi día :) –
Si esto falla para ti (como me sucedió a mí), debes asegurarte de que el usuario de la base de datos pueda mostrar tablas en la base de datos. –
Muestra todas las tablas en todas las bases de datos. Puede pasar el nombre de la base de datos como el primer parámetro para mostrar las tablas solo en ese db. – Mahdi