Pregunta

Estoy usando derby como una base de datos integrada. Por otra parte, lo estoy usando la opción de base en memoria de mis pruebas de unidad.

Lo que no puedo entender es cómo ha apagado correctamente (Una rápida mirar el código) la base de datos Derby. Yo me puedo creer que tengo que trabajar para una base de datos estándar, pero me estoy poniendo diferentes excepciones cuando intente un código similar en una base de datos en memoria.

Me voy a los detalles omitir, voy a añadir si se necesita otra sensación.

Básicamente, estoy tratando de cerrar mi base de datos en estos dos modas en mi base de datos en memoria se llama constantemente "eh":

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

a continuación:

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

Los resultados anteriores en una excepción, pero no la esperada . Los detalles son los siguientes:

  

java.sql.SQLNonTransientConnectionException: Base de datos 'memoria: eh'. Apagado

Estos últimos resultados en

  

java.sql.SQLException:. Base de datos 'eh' no encontrado

Sobre la base de lo que he sido capaz de averiguar, queremos una SQLException pero no la recibimos. Por otra parte, el error SQLNonTransientConnectionException parece más apropiado, pero no es del tipo correcto (aunque se deriva de SQLException) ni tampoco tiene el código de estado correcto. El extremo del código de estado siendo:. 08006

El código de ejemplo tengo ilustra que un SQLException con un estado SQL de "XJ015".

Nota: El ejemplo que estoy haciendo referencia es: Programa WwdEmbedded ( Código de Java ).

¿Fue útil?

Solución

XJ015 (con SQLCODE 50000) es el (buen) SQLSTATE completa esperada para el cierre del sistema. 08006 (con SQLCODE 45000), por el contrario, es la SQLSTATE esperada para el cierre de una base de datos única persona.

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

Apaga todo el sistema y debería resultar en XJ015.

Otros consejos

La URL "jdbc: derby: Memoria: eh, el apagado = true" da como resultado la espera 08006 código de error, pero en realidad no eliminar la base de datos de la memoria. Si más adelante, intenta crear una nueva base de datos con "jdbc: derby: Memoria: eh; crear = true", obtendrá un error que indica que la base de datos ya existe

.

Afortunadamente, a partir de Derby 10.6.1.0 (publicado el 17 de mayo de 2010), es posible caer en realidad una base de datos en la memoria utilizando una URL de la forma "jdbc: derby: Memoria: eh; gota = true" . Consulte la notas de la versión y la página el uso de bases de datos en memoria .

Creo que el primer ejemplo de código está muy bien. La diferencia Estado SQL que están viendo, creo, porque se está ejecutando Derby incorporado, pero el código de ejemplo que viste (con SQL XJ015 estado) se ejecuta en una configuración cliente-servidor.

Como se ha señalado, el SQLNonTransientConnectionException es una subclase de SQLException, así que estoy confundido en cuanto a por qué cree que no está recibiendo el tipo de excepción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top