Frage

Ich bin mit Derby als eingebettete Datenbank. Außerdem, ich bin es die In-Memory-Datenbank-Option für meine Unit-Tests verwenden.

Was kann ich nicht herausfinden, ist, wie man richtig heruntergefahren (A Schnell Blick auf den Code) der Derby-Datenbank. Ich glaube, ich habe es für eine Standard-Datenbank arbeiten, aber ich bin immer verschiedene Ausnahmen, wenn sie auf eine In-Memory-Datenbank ähnlichen Code versuchen.

Ich werde wegzulassen Details, ich werde sie hinzufügen, wenn andere das Gefühl gebraucht werden.

Im Grunde genommen, ich versuche, meine Datenbank in diesen beiden Moden herunterzufahren, wo meine In-Memory-Datenbank konsistent „eh“ genannt wird:

DriverManager.getConnection("jdbc:derby:memory:eh;shutdown=true");

dann:

DriverManager.getConnection("jdbc:derby:eh;shutdown=true");

Die früheren Ergebnisse in eine Ausnahme aber nicht die, erwartet . Die Details sind:

  

java.sql.SQLNonTransientConnectionException: Datenbank 'Speicher: eh'. Shutdown

Die letzten Ergebnisse in

  

java.sql.SQLException. Datenbank 'eh' nicht gefunden

Nach dem, was ich habe in der Lage, herauszufinden, wollen wir ein SQLException aber nicht die, die wir erhalten. Auf der anderen Seite scheint der SQLNonTransientConnectionException Fehler besser geeignet, ist aber nicht der richtige Typ (obwohl es von SQLException abgeleitet ist) auch nicht den richtigen Zustand Code. Der Staat Code am Ende wird. 08006

Der Beispielcode Ich habe erläutert, dass ein SQLException mit einem SQL-Status von „XJ015“.

Hinweis: Das Beispiel mir Referenzierung ist: WwdEmbedded Programm ( Java-Code ).

War es hilfreich?

Lösung

XJ015 (mit SQLCODE 50000) ist die erwartete (erfolgreich) SQLSTATE für eine vollständige Herunterfahren des Systems. 08006 (mit SQLCODE 45000), auf der anderen Seite ist die erwartete SQLSTATE für das Abschalten von nur einer einzelnen Datenbank.

DriverManager.getConnection("jdbc:derby:;shutdown=true");

Fährt das gesamte System und sollte in XJ015 zur Folge hat.

Andere Tipps

Die URL "jdbc: derby: memory: eh; Shutdown = true" Ergebnisse in dem erwarteten 08.006 Fehlercode, ist aber nicht wirklich die DB aus dem Speicher entfernen. Wenn später, versuchen Sie eine neue Datenbank mit zu schaffen „jdbc: derby: memory: eh; create = true“, werden Sie einen Fehler erhalten, dass die Datenbank bereits vorhanden

.

Zum Glück, wie von Derby 10.6.1.0 (veröffentlicht am 17. Mai 2010), ist es möglich, tatsächlich eine In-Memory-Datenbank zu löschen, indem Sie eine URL der Form "jdbc: derby: memory: eh; Drop = true" . Sehen Sie sich die Release Notes und die Seite Verwendung von in-Memory-Datenbanken .

Ich glaube, dass Ihr erstes Codebeispiel in Ordnung ist. Der SQL-Status Unterschied, dass Sie sehen, wie ich glaube, ist, weil Sie Derby eingebettet sind, ausgeführt wird, aber das Beispiel-Code, dass Sie sah (mit SQL-Status XJ015) wurde in einem Client-Server-Konfiguration ausgeführt wird.

Wie Sie bemerkt, ist die SQLNonTransientConnectionException eine Unterklasse von SQLException, so dass ich bin verwirrt, warum Sie denken, Sie sind nicht die richtige Art von Ausnahme zu bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top