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 ).

È stato utile?

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.

scroll top