Nel tuo esempio problema viene passato nome pattern nella funzione getTables di DatabaseMetaData.
Alcuni database supportano l'identificatore di maiuscole, alcuni supportano identificatori di lettere minuscole. Per esempio oracle recupera il nome della tabella in maiuscolo, mentre postgreSQL lo preleva in minuscolo.
DatabaseMetaDeta fornisce un metodo per determinare come gli archivi di database identificatori, possono essere caso, maiuscolo, vedi minuscolo misti: http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#storesMixedCaseIdentifiers()
Da sotto esempio, è possibile ottenere tutte le tabelle e vista di fornire il nome della tabella modello, se si vogliono solo le tabelle e quindi rimuovere "VIEW" dall'array 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();
}
}
}
Grazie! hai fatto il mio giorno :) –
Se questo non funziona come te, devi assicurarti che l'utente del database possa effettivamente mostrare le tabelle sul database. –
Mostra tutte le tabelle in tutti i database. È possibile passare il nome del database come primo parametro per visualizzare solo le tabelle in tale db. – Mahdi