prüfen ob Tabelle existiert, mit einem Verbindungs-Objekt in java
Brauche ich, um zu überprüfen, ob eine Tabelle mit einem bestimmten "tablename" in einer Datenbank vorhanden ist von meinem java-Programm.
Die Datenbank kann von unterschiedlicher Art, nämlich. MS-SQL-Server, Oracle, DB2. Ich habe ein connection-Objekt auf die Datenbank. Gibt es eine einzige Methode, die funktionieren kann für alle Arten von Datenbanken?
Ich könnte erweitern Sie das java-Programm zur Unterstützung von mehr db-Typen, also einen einheitlichen Ansatz für alle DB Typen wäre sehr hilfreich.
Den code, den ich verwende. Dies scheint, um korrekt zu arbeiten, die für eine SQL Server-Datenbank aber nicht finden Sie in der Tabelle im Oracle-oder DB2 -
DatabaseMetaData meta = conn.getMetaData();
ResultSet res = meta.getTables(null, null, "TABLE_NAME", null);
if(!res.next()){
//table does not exist.
} else{
//table exists.
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehr simpel:
Wenn es eine exception wirft die Tabelle nicht vorhanden ist (oder etwas anderes falsch ist).
Ansonsten:
http://docs.oracle.com/javase/6/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
Können Sie die DatabaseMetaData.getTables() Verfahren, um die Suche in der Datenbank für Tabellen mit einem bestimmten Muster. Wenn Sie suchen für eine genaue Bezeichnung, werden Sie entweder eine leere
ResultSet
oder eineResultSet
mit einer einzigen Zeile sagt Ihnen, dass die Tabelle vorhanden ist.Dies funktioniert für mich gegen eine Oracle Datenbank, ob die Tabelle gehört dem aktuellen Benutzer oder einem anderen Benutzer.
getTables
sicherlich arbeitet für Oracle-ich muss davon ausgehen, dass Sie auf der Durchreise sind die Parameter falsch, aber es ist schwer zu erraten, was der Fehler ist, ohne dass der code.DatabaseMetaData meta = conn.getMetaData();
ResultSet res = meta.getTables(null, null, "TABLE_NAME", null);
if(!res.next()){
` //Tabelle existiert nicht.`} else{
` //Tabelle existiert.`}
ALL_TABLES
zeigen, dass eine bestimmte Tabelle vorhanden ist und die entsprechende Java-Aufruf, der nicht geben die Tabelle vorhanden ist? Meine Vermutung ist entweder, dass der Benutzer Sie angemeldet sind als nicht-Zugriff auf die Tabelle oder die Sie übergeben, in der falschen Tabelle Namen (zum Beispiel durch die falsche Schreibweise).select count(*) from all_tables where table_name = 'EMP'
(oder was auch immer Tabelle, der Sie interessiert), die zeigt, dass die Tabelle vorhanden ist und Sie Zugriff darauf haben. Dann zeigen Sie uns den entsprechenden AufrufgetTables
.null
eher als die leere saite, die Sie nicht brauchen, um anzugeben, eineschema_name
. Der code, den ich gepostet funktioniert gegen eine 11.2-Datenbank (und sollte gegen frühere Versionen), ob die Tabelle gehört dem aktuellen Benutzer oder nicht, so lange der Benutzer hat Zugriff auf die Tabelle.Können Sie versuchen
getTables()
Methode derDatabaseMetaData
.