2009-02-25 10 views
6

Mit Apache Derby mit Java (J2ME, aber ich glaube nicht, dass das einen Unterschied macht) gibt es eine Möglichkeit zu überprüfen, ob eine Datenbank bereits existiert und eine Tabelle enthält?Apache Derby - Check-Datenbank bereits erstellt?

+0

Siehe auch http://stackoverflow.com/questions/584497/apache-derby-check-database-already-created – Raedwald

Antwort

10

Ich kenne keine, außer wenigen umgehen, im Gegensatz zu MySQL, wo wir diese Möglichkeit von IF EXIST haben.

Was Sie tun, ist, versuchen, eine Verbindung mit der Datenbank, wenn nicht könnte es wahrscheinlich ist nicht dort. Nach einer erfolgreichen Verbindung können Sie eine einfache Auswahl treffen, z. B. SELECT count (*) FROM TABLE_NAME, um zu ermitteln, ob die Tabelle vorhanden ist oder nicht. Sie würden von der Ausnahme abhängig sein. Selbst in einem offiziellen Beispiel von Sun habe ich ähnliche Arbeiten gesehen.

In Oracle haben wir Dictionary-Tabellen, um über die Datenbankobjekte zu wissen. Ich bezweifle, dass wir in Derby so etwas haben.

[Edited]

Nun, fand ich, dass es eine Möglichkeit zu wissen, ob die Tabelle vorhanden sind. Versuchen Sie, SELECT Tabellenname FROM SYSTABLES. Es ist für die Überprüfung der Existenz einer Tabelle, für die Überprüfung der Datenbank müssen Sie möglicherweise ähnliche Dinge tun, ich oben erläutert.

8

Adeel, könnten Sie auch Connection.getMetaData verwenden, um ein DatabaseMetaData Objekt zurück, dann die getTables verwenden, sobald Sie die Verbindung zur Datenbank natürlich haben. Dies hat den Vorteil, dass Sie für jede Datenbank mit einem JDBC-Treiber arbeiten können, der sich lohnt.

Um zu überprüfen, ob die Datenbank existiert, wenn Sie Derby auf die eingebettete Weise verwenden oder der Server sich auf demselben Computer befindet, könnten Sie überprüfen, ob der Ordner für die Datenbank existiert. Ist aber ein bisschen kludgy. Ich würde tun, was Adeel vorschlägt, und versuchen, eine Verbindung herzustellen, indem ich die Ausnahme abfange, wenn sie nicht da ist.

2

Ich würde vorschlagen, das DatabaseMetaData-Objekt abzurufen und dann die Methode getTables (null, null, null, new String [] {"TABLE"}) zu verwenden, die ein ResultSet zurückgibt. Verwenden Sie die next() - Methode des ResultSet, die einen booleschen Wert zurückgibt, um zu testen, ob Tabellen vorhanden sind. Wenn es wahr ist, haben Sie Tabellen vorhanden. Falsch und die Datenbank ist leer.