Ich finde keine der hier vorgestellten Lösungen, um vollständig zu sein, also werde ich meine eigenen hinzufügen. Nichts Neues hier. Sie können dies aus den anderen vorgestellten Lösungen plus verschiedene Kommentare zusammenfügen.
Es gibt mindestens zwei Dinge, die Sie sicher machen müssen:
Achten Sie darauf, den Tabellennamen übergeben an die getTables()
method, eher als einen Nullwert übergeben. Im ersten Fall lassen Sie den Datenbankserver das Ergebnis für Sie filtern, im zweiten fordern Sie eine Liste von alle Tabellen vom Server an und filtern Sie dann die Liste lokal. Ersteres ist viel schneller, wenn Sie nur nach einer Einzeltabelle suchen.
Vergewissern Sie sich, dass der Tabellenname aus dem Resultset mit einem Gleichheitszeichen übereinstimmt. Der Grund ist, dass die getTables()
Mustererkennung auf die Abfrage für die Tabelle und das _
Zeichen ein Platzhalter in SQL ist. Angenommen, Sie prüfen, ob eine Tabelle namens EMPLOYEE_SALARY
vorhanden ist. Sie erhalten dann eine Übereinstimmung auf zu , was nicht das ist, was Sie wollen.
Ohh, und vergessen Sie nicht, diese Ergebnisse zu schließen. Seit Java 7 möchten Sie dafür eine try-with-resources statement verwenden.
Hier ist eine komplette Lösung:
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;
}
Sie betrachten wünschen können, was Sie als types
Parameter (4 Parameter) übergeben auf Ihrem getTables()
Anruf. Normalerweise würde ich einfach unter null
gehen, weil Sie sich nicht einschränken wollen. Ein Blick ist so gut wie ein Tisch, oder?Heutzutage können Sie in vielen Datenbanken über eine VIEW aktualisieren, so dass Sie sich nur auf den TABLE-Typ beschränken können, was in den meisten Fällen nicht der richtige Weg ist. YMMV.
möglich Duplikat [Wie kann ich eine SQL-Tabelle Existenz in Java erkennen?] (Http://stackoverflow.com/questions/927807/how-can-i-detect-a-sql-tables-existence -in-java) – finnw
Bitte präzisieren Sie in Ihrer Frage. –