Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to shutdown Derby in-memory database Properly

I'm using derby as an embedded database. Furthermore, I'm using it's in-memory database option for my unit tests.

What I can't figure out is how to properly shut down (A quick look at the code) the Derby database. I beleive I have it working for a standard database but I'm getting different exceptions when attempt similar code on a in-memory database.

I'm going to omit details, I'll add them if other feel are needed.

Basically, I'm trying to shut down my database in these two fashions where my in-memory database is consistently called "eh":

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

then:

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

The former results in an exception but not the one expected. The details are:

java.sql.SQLNonTransientConnectionException: Database 'memory:eh' shutdown.

The latter results in

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

Based on what I've been able to figure out, we want a SQLException but not the one we receive. On the other hand, the SQLNonTransientConnectionException error seems more appropriate but isn't the right type (though it is derived from SQLException) nor does it have the right state code. The state code end up being: 08006.

The example code I have illustrates that a SQLException with a SQL state of "XJ015".

Note: The example I'm referencing is: WwdEmbedded Program (Java Code).

like image 975
Frank V Avatar asked Feb 21 '10 22:02

Frank V


People also ask

Is Derby an in memory database?

For testing and developing applications, or for processing transient or reproducible data, you can use Derby's in-memory database facility. An in-memory database resides completely in main memory, not in the file system.

How do I check my Derby database?

If you want to connect to a Derby database which is running in server mode then you can use the following command. connect 'jdbc:derby://localhost:1527/c:\temp\db\FAQ\db;create=true';

Is Derby a database?

Apache Derby is a Relational Database Management System which is fully based on (written/implemented in) Java programming language. It is an open source database developed by Apache Software Foundation. Oracle released the equivalent of Apache Derby with the name JavaDB.


1 Answers

XJ015 (with SQLCODE 50000) is the expected (successful) SQLSTATE for complete system shutdown. 08006 (with SQLCODE 45000), on the other hand, is the expected SQLSTATE for shutdown of only an individual database.

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

Shuts down the entire system and should result in XJ015.

like image 113
Jow Avatar answered Oct 28 '22 18:10

Jow