Dans votre exemple de problème est table passée modèle de nom dans la fonction getTables de DatabaseMetaData.
Certaines bases de données prennent en charge l'identificateur en majuscules, d'autres prennent en charge les identificateurs en minuscules. Par exemple, Oracle récupère le nom de la table en majuscules, alors que PostgreSQL le récupère en minuscules.
DatabaseMetaDeta fournit une méthode pour déterminer comment la base de données des identifiants de magasins, peuvent être mélangés cas, majuscules, voir minuscules: http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#storesMixedCaseIdentifiers()
De exemple ci-dessous, vous pouvez obtenir toutes les tables et la vue de fournir un modèle de nom de table, si vous veulent seulement des tables puis suppriment "VIEW" du tableau 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();
}
}
}
Merci! vous avez fait ma journée :) –
Si cela échoue pour vous (comme il m'a fait), vous devez vous assurer que l'utilisateur de la base de données peut réellement afficher des tables sur la base de données. –
Affiche toutes les tables de toutes les bases de données. Vous pouvez passer le nom de la base de données en tant que premier paramètre pour afficher les tables uniquement dans cette base de données. – Mahdi