En fait, je ne trouve aucune des solutions présentées ici entièrement complète, alors je vais ajouter la mienne. Rien de nouveau ici. Vous pouvez assembler tout cela à partir des autres solutions présentées et de divers commentaires.
Il y a au moins deux choses dont vous devrez vous assurer :
-
Assurez-vous de passer le nom de la table à la méthode getTables()
méthode , plutôt que de passer une valeur nulle. Dans le premier cas, vous laissez le serveur de base de données filtrer le résultat pour vous, dans le second vous demandez une liste de todo tables du serveur, puis de filtrer la liste liste localement. La première méthode est beaucoup plus rapide si vous ne recherchez qu'une seule seule table.
-
Assurez-vous de vérifier le nom de la table dans le jeu de résultats avec une correspondance égal. La raison en est que le getTables()
effectue une correspondance de motifs sur la requête pour la table et le _
est un caractère générique en SQL. Supposons que vous vérifiez l'existence d'une table nommée EMPLOYEE_SALARY
. Vous obtiendrez alors une correspondance sur EMPLOYEESSALARY
trop ce qui n'est pas ce que vous voulez.
Ohh, et n'oubliez pas de fermer ces jeux de résultats. Depuis Java 7, il est préférable d'utiliser un déclaration d'essai avec les ressources pour ça.
Voici une solution complète :
public static boolean tableExist(Connection conn, String tableName) throws SQLException {
boolean tExists = false;
try (ResultSet rs = conn.getMetaData().getTables(null, null, tableName, null)) {
while (rs.next()) {
String tName = rs.getString("TABLE_NAME");
if (tName != null && tName.equals(tableName)) {
tExists = true;
break;
}
}
}
return tExists;
}
Vous pouvez réfléchir à ce que vous passez comme le types
(4ème paramètre) sur votre getTables()
appeler. Normalement, j'aurais juste laissé à null
parce que vous ne voulez pas vous restreindre. Une VIEW est aussi bonne qu'une TABLE, n'est-ce pas ? De nos jours, de nombreuses bases de données vous permettent d'effectuer des mises à jour par le biais d'une VIEW. Se limiter à un type de TABLE n'est donc pas la meilleure solution dans la plupart des cas. YMMV.
0 votes
Veuillez être plus précis dans votre question.