Come spegnere Derby database in memoria correttamente
-
22-09-2019 - |
Domanda
sto usando derby come un database incorporato. Inoltre, sto usando il suo opzione di database in-memory per il mio test di unità.
Quello che non riesco a capire è come chiudere correttamente giù (Un rapido guardare il codice) il database Derby. Ho credere ce l'ho a lavorare per una banca dati standard, ma sto ottenendo diverse eccezioni quando tentativo codice simile su un database in-memory.
ho intenzione di omettere dettagli, aggiungerò loro se sono necessari altri tatto.
In sostanza, sto cercando di chiudere il mio database in questi due modi in cui il mio database in memoria è costantemente chiamato "eh":
DriverManager.getConnection("jdbc:derby:memory:eh;shutdown=true");
quindi:
DriverManager.getConnection("jdbc:derby:eh;shutdown=true");
Gli ex risultati in un'eccezione, ma non quello atteso . I dettagli sono:
java.sql.SQLNonTransientConnectionException: Database 'di memoria: eh'. Shutdown
Gli ultimi risultati in
java.sql.SQLException: Database 'eh' non trovato
.
In base a quello che ho potuto capire, vogliamo una SQLException
ma non quello che riceviamo. D'altra parte, l'errore SQLNonTransientConnectionException
sembra più appropriato, ma non è del tipo giusto (anche se è derivata da SQLException
) né ha il codice giusto stato. Il codice di stato di finiscono per essere:. 08006
Il codice di esempio ho illustra che un SQLException
con uno stato SQL di "XJ015".
Nota: L'esempio che sto riferimento è: WwdEmbedded Programma ( codice Java ).
Soluzione
XJ015 (con SQLCODE
50000) è il (buon) SQLSTATE
previsto per lo spegnimento del sistema completo. 08006 (con SQLCODE
45000), d'altra parte, è il SQLSTATE
previsto per l'arresto di solo un singolo database.
DriverManager.getConnection("jdbc:derby:;shutdown=true");
Chiude l'intero sistema e dovrebbe risultare in XJ015
.
Altri suggerimenti
L'URL "jdbc: derby: Memoria: eh; arresto = true" provoca il codice di errore previsto 08006, ma in realtà non rimuovere il DB dalla memoria. Se più tardi, si tenta di creare un nuovo database con "jdbc: derby: Memoria: eh; creare = true", si otterrà un errore che dice che il database già esistente
.Per fortuna, come di Derby 10.6.1.0 (uscito il 17 maggio 2010), è possibile eliminare in realtà un database in memoria utilizzando un URL della forma "jdbc: derby: Memoria: eh; goccia = true" . Vedere la note di rilascio e la rel="noreferrer"> .
Credo che il primo esempio di codice va bene. La differenza SQL Stato che si sta vedendo, io credo, è perché si esegue Derby Embedded, ma il codice di esempio che si è visto (con lo stato SQL XJ015) è stato eseguito in una configurazione client-server.
Come si è preso nota, lo SQLNonTransientConnectionException è una sottoclasse di SQLException, quindi sono confusa sul motivo per cui si pensa non si è trovato il giusto tipo di eccezione.