Comment arrêter correctement la base de données en mémoire de Derby
Je suis en utilisant le derby à une base de données intégrée. De plus, je suis à l'aide de sa base de données en mémoire option pour mes tests unitaires.
Ce que je ne peux pas savoir comment éteindre (Un petit coup d'oeil sur le code) la base de données Derby. Je crois que j'ai de travailler pour une base de données standard, mais je suis différent des exceptions lors de la tentative de code similaire sur une base de données en mémoire.
Je vais omettre les détails, je vais les ajouter si d'autres jugent nécessaires.
En gros, je suis en train de fermer ma base de données dans ces deux modes d'où ma base de données en mémoire est toujours appelé "eh":
DriverManager.getConnection("jdbc:derby:memory:eh;shutdown=true");
alors:
DriverManager.getConnection("jdbc:derby:eh;shutdown=true");
L'ancien 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.
Les derniers résultats en
java.sql.SQLException: Base de données 'eh' introuvable.
Fondée sur ce que j'ai pu comprendre, nous voulons un SQLException
mais pas ce que nous recevons. D'autre part, la SQLNonTransientConnectionException
erreur semble plus approprié, mais ce n'est pas le type (bien que c'est un dérivé du SQLException
) ni n'a le droit de l'état. Le code de l'état à la fin: 08006
.
L'exemple de code que j'ai montre que SQLException
avec un SQL état de "XJ015".
Remarque: L'exemple je suis référencement est: WwdEmbedded Programme (Le Code Java).
source d'informationauteur Frank V
Vous devez vous connecter pour publier un commentaire.
XJ015 (avec
SQLCODE
50000) est la (bonne)SQLSTATE
pour compléter l'arrêt du système. 08006 (avecSQLCODE
45000), d'autre part, il est prévu que lesSQLSTATE
pour l'arrêt de seulement un individu de la base de données.Arrête l'ensemble du système et qui devrait aboutir à
XJ015
.L'URL "jdbc:derby:mémoire:hein;arrêt=true" résultats dans le 08006 code d'erreur, mais n'a pas de supprimer la DB à partir de la mémoire. Si plus tard, vous essayez de créer une nouvelle base de données avec "jdbc:derby:mémoire:hein;create=true", vous obtiendrez un message d'erreur indiquant que la base de données existe déjà.
Heureusement, en tant que de Derby 10.6.1.0 (publié le 17 Mai 2010), il est possible de réellement supprimer une base de données en mémoire à l'aide d'une URL de la forme "jdbc:derby:mémoire:hein;drop=true". Voir la notes de version et la page À l'aide de bases de données en mémoire.
Je crois que votre premier exemple de code est très bien. L'État SQL différence que vous voyez, je crois, c'est parce que vous êtes en cours d'exécution Derby intégrés, mais l'exemple de code que vous avez vu (avec SQL état XJ015) était en cours d'exécution dans une configuration client-serveur.
Comme vous l'avez remarqué, le SQLNonTransientConnectionException est une sous-classe de SQLException, donc je suis confus quant à pourquoi vous pensez que vous êtes de ne pas obtenir le bon type de l'exception.