W przykładzie problemu przepuszcza tabeli wzorzec nazwy w funkcji getTables DatabaseMetaData.
Niektóre bazy danych obsługują wielkie litery, niektóre obsługują małe litery. Na przykład oracle pobiera wielką nazwę tabeli, podczas gdy postgreSQL pobiera ją małymi literami.
DatabaseMetaDeta zapewnia sposób, aby określić jak identyfikatory przechowuje baz danych, mogą być mieszane litery, wielkie litery, małe litery patrz: http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#storesMixedCaseIdentifiers()
Od poniżej przykładzie, można uzyskać wszystkie tabele i widok zapewniając nazwa tabeli wzór, jeśli ciebie chcesz tylko tabele, a następnie usuń "WIDOK" z tablicy 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();
}
}
}
Dzięki! Zrobiłeś mój dzień :) –
Jeśli to ci się nie uda (tak jak mnie) musisz upewnić się, że użytkownik bazy danych rzeczywiście pokazuje tabele w bazie danych. –
Pokazuje wszystkie tabele we wszystkich bazach danych. Nazwę bazy danych można przekazać jako pierwszy parametr, aby wyświetlić tylko tabele w tej bazie danych. – Mahdi