Question

J'utilise derby comme base de données intégrée. De plus, je l'utilise est l'option de base de données en mémoire pour mes tests unitaires.

Ce que je ne peux pas comprendre est comment arrêter correctement vers le bas (Un rapide regarder le code) la base de données Derby. Je beleive que je l'ai travaille pour une base de données standard, mais j'obtiens différentes exceptions lorsque tentative code similaire sur une base de données en mémoire.

Je vais omettre les détails, je vais les ajouter si d'autres que vous jugez nécessaire.

En fait, je suis en train de fermer ma base de données dans ces deux modes où ma base de données en mémoire est appelée constamment « eh »:

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

alors:

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

Les anciens résultats dans une exception, mais pas celui attendu . Les détails sont les suivants:

  

java.sql.SQLNonTransientConnectionException: Base de données 'mémoire: eh'. Arrêt

Ces derniers résultats en

  

java.sql.SQLException: Database 'eh' not found

.

D'après ce que je suis en mesure de comprendre, nous voulons un SQLException mais pas celui que nous recevons. D'autre part, l'erreur de SQLNonTransientConnectionException semble plus approprié, mais n'est pas le bon type (bien qu'il soit dérivé de SQLException) n'a pas non plus le bon code d'état. La fin code d'état jusqu'à être. 08006

Le code exemple je montre qu'un SQLException avec un état SQL de "XJ015".

Note: L'exemple que je fais référence est le suivant: WwdEmbedded Programme ( du code Java ).

Était-ce utile?

La solution

XJ015 (avec SQLCODE 50000) est prévu (avec succès) SQLSTATE pour l'arrêt complet du système. 08006 (avec SQLCODE 45000), d'autre part, est le SQLSTATE prévu pour l'arrêt de seulement une base de données individuelle.

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

arrête le système tout entier et devrait entraîner XJ015.

Autres conseils

L'URL « jdbc: derby: mémoire: eh, arrêt = true » dans les résultats les attendus 08006 code d'erreur, mais ne supprime pas réellement la DB de la mémoire. Si plus tard, vous essayez de créer une nouvelle base de données avec « jdbc: derby: mémoire: eh, créer = true », vous obtiendrez une erreur indiquant que la base de données existe déjà

.

Heureusement, comme de Derby 10.6.1.0 (publié le 17 mai 2010), il est possible de déposer effectivement une base de données en mémoire à l'aide d'une URL de la forme "jdbc: derby: mémoire: eh, drop = true" . Voir notes de version et la page en utilisant les bases de données en mémoire .

Je crois que votre premier exemple de code est très bien. La différence SQL État que vous voyez, je crois, parce que vous utilisez Derby embedded, mais l'exemple de code que vous avez vu (avec l'état SQL XJ015) fonctionnait dans une configuration client-serveur.

Comme vous l'avez dit, le SQLNonTransientConnectionException est une sous-classe de SQLException, donc je suis confus quant à pourquoi vous pensez que vous ne recevez pas le bon type d'exception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top