La verificación de una base de datos es como la espera.
-
20-08-2019 - |
Pregunta
He estado escribiendo una aplicación Java en mi máquina y funciona perfectamente usando el DB que configuré, pero cuando lo instalo en el sitio explota porque el DB es ligeramente diferente.
Así que estoy en el proceso de escribir un código para verificar que:
-
A: Tengo los detalles de la base de datos correctos
-
B: La base de datos tiene todas las Tablas que espero y tienen las columnas correctas.
Tengo A abajo pero no tengo idea de por dónde empezar con B, ¿alguna sugerencia?
Target DB es para el cliente actual es Oracle, pero la aplicación también se puede configurar para ejecutarse en SQL Server. Por lo tanto, se agradecería una solución genérica, pero no es necesaria ya que estoy seguro de que puedo descubrir cómo hacer una de la otra.
Solución
Querrá consultar el esquema de información de la base de datos, aquí hay algunos ejemplos para Oracle, cada plataforma que conozco tiene algo similar.
Otros consejos
Es posible que pueda utilizar una herramienta de migración de base de datos como LiquiBase para esto; la mayoría de estas herramientas tienen alguna forma de verificar la base de datos. No tengo experiencia de primera mano al usarlo, así que es una suposición.
La solución más genérica sería ejecutar consultas con una cláusula select que tenga los coulmns esperados y una cláusula que tenga nombres de tabla, dentro del bloque try catch. Puede poner la cláusula where como 1 = 2 para no recuperar ningún dato. Si la consulta se ejecuta sin generar una excepción, obtendrá la tabla y las columnas esperadas.
La pieza ligeramente diferente podría manejarse mejor al crear scripts para la creación de la base de datos en primer lugar. Un proceso automatizado le brinda una mejor oportunidad de hacer que los dos sean idénticos.
Otro punto que vale la pena destacar es que minimiza su riesgo al hacer que sus entornos de desarrollo y producción sean idénticos: el mismo esquema de base de datos y proveedor para ambos. Cambia las circunstancias que hacen que los dos sean diferentes.
Por último, no dices qué es " ligeramente " diferentes, pero a veces son inevitables (por ejemplo, Oracle usa secuencias, SQL Server usa identidades). Tal vez Hibernate puede ayudarlo a cambiar entre proveedores de manera más confiable. Resume los detalles de tal manera que cambiar las bases de datos puede significar modificar un solo valor en un archivo de configuración.
Lo que necesita tener es básicamente pruebas unitarias para su base de datos. " Debe existir una columna llamada FOOBAR, el tipo debe ser Integer. No pueden existir claves foráneas, etc. & Quot;
Esto es factible con JUnit y JDBC simples (pregunte en la tabla por sus metadatos) ya que puede asegurarse de estar absolutamente seguro de lo que se está haciendo, lo que puede ser más difícil cuando se usa dbUnit.
Puede verificar la presencia de tablas, columnas, vistas, etc. utilizando estas tablas en Oracle
USER_TABLES USER_VIEWS USER_PROCEDURE
(o para todo) USER_OBJECTS WHERE OBJECT_TYPE = '??'
Para continuar ... USER_TAB_COLS para columnas de tabla
Saludos K
Utilizo MigrateDB para esto. Le permite crear consultas que hacen cosas como verificar la existencia de tablas, columnas, filas, índices, etc. dados para una base de datos determinada y usarlos como & Quot; tests. & Quot; Si una prueba falla, desencadena una & Quot; acción & Quot; (que es solo otra consulta que sabe cómo solucionar el problema).
MigrateDB es compatible con múltiples plataformas de bases de datos (puede especificar & "; verificar la consulta de existencia de tabla &"; para cada plataforma, por ejemplo), pruebas completamente configurables (puede hacer las suyas propias), viene con pruebas de Oracle bastante completas, y se pueden ejecutar en " auditar solo " modo para que solo te diga cuáles son las diferencias.
Es una solución agradable y robusta.
Si está utilizando JDBC simple, debería intentar utilizar este método: DatabaseMetadata.getTables y otros métodos similares disponibles en la clase de metadatos.