В вашем примере задачи передается таблицы name в функции getTables базы данных DatabaseMataData.
Некоторые базы данных поддерживают идентификатор верхнего регистра, некоторые идентификаторы нижнего регистра поддержки. Например, оракул извлекает имя таблицы в верхнем регистре, а postgreSQL - в нижнем регистре.
DatabaseMetaDeta предоставляет метод для определения того, как хранятся базы данных идентификаторов, могут быть смешаны случай, заглавные буквы, строчные буквы см: http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#storesMixedCaseIdentifiers()
Снизу Например, вы можете получить все таблицы и представление о предоставлении имени таблицы шаблона, если вы нужно только таблицы, а затем удалить «VIEW» из массива 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();
}
}
}
Спасибо! вы сделали мой день :) –
Если это не поможет вам (как и мне), вы должны убедиться, что пользователь базы данных может фактически показывать таблицы в базе данных. –
Он отображает все таблицы во всех базах данных. Вы можете передать имя базы данных в качестве первого параметра для отображения таблиц только в этом db. – Mahdi