Domanda

Ho scritto un'app java sulla mia macchina e funziona perfettamente usando il DB che ho impostato, ma quando lo installo sul posto si fa saltare perché il DB è leggermente diverso.

Quindi sto scrivendo del codice per verificare che:

  • A: I dettagli del DB sono corretti

  • B: il database ha tutte le tabelle che mi aspetto e hanno le colonne giuste.

Ho A giù ma non ho idea di dove iniziare con B, qualche suggerimento?

Il DB di destinazione è per il client corrente è Oracle, ma l'app può essere configurata per essere eseguita anche su SQL Server. Quindi una soluzione generica sarebbe apprezzata, ma non è essenziale in quanto sono sicuro di riuscire a capire come fare l'uno dall'altro.

È stato utile?

Soluzione

Avrai bisogno di interrogare lo information_schema del database, qui ci sono alcuni esempi per Oracle, ogni piattaforma di cui sono a conoscenza ha qualcosa di simile.

http://www.alberton.info/oracle_meta_info.html

Altri suggerimenti

Potresti essere in grado di utilizzare uno strumento di migrazione del database come LiquiBase per questo - la maggior parte di questi strumenti ha un modo per controllare il database. Non ho esperienza di prima mano nell'usarlo, quindi è un'ipotesi.

Uso DbUnit per testare i database. È una soluzione basata su Java, che si integra bene con Junit . È possibile usarlo quasi senza Java. Non l'ho usato esattamente nella stessa situazione che hai descritto, ma dovrebbe essere abbastanza vicino per funzionare.

La soluzione più generica sarebbe quella di eseguire query con clausola select con i coulmns previsti e dalla clausola con nomi di tabella, all'interno del blocco try try. È possibile inserire la clausola where come 1 = 2 in modo da non recuperare alcun dato. Se la query viene eseguita senza generare eccezioni, hai la tabella e le colonne previste.

Il pezzo leggermente diverso potrebbe essere gestito meglio copiando innanzitutto la creazione del database. Un processo automatizzato offre maggiori possibilità di rendere i due identici.

Un altro punto degno di nota è minimizzare il rischio rendendo identici gli ambienti devl e prod - lo stesso schema di database e lo stesso fornitore per entrambi. Cambia le circostanze che rendono i due diversi.

Infine, non dici cosa è " leggermente " diversi, ma a volte questi sono inevitabili (ad es. Oracle utilizza sequenze, SQL Server utilizza identità). Forse Hibernate può aiutarti a passare da un fornitore all'altro in modo più affidabile. Estrae i dettagli in modo tale che cambiare database possa significare modificare un singolo valore in un file di configurazione.

Ciò che devi avere sono fondamentalmente Test unitari per il tuo database. " Deve esistere una colonna denominata FOOBAR, il tipo deve essere intero. Non possono esistere chiavi esterne ecc. & Quot;

Questo è fattibile con JUnit e JDBC semplici (chiedi alla tabella i suoi metadati) in quanto potresti voler assicurarti di essere assolutamente sicuro di ciò che viene fatto che potrebbe essere più difficile quando usi ad es. DBUnit.

Puoi verificare la presenza di tabelle, colonne, viste, ecc. usando queste tabelle in Oracle

USER_TABLES USER_VIEWS USER_PROCEDURE

(o per tutto) USER_OBJECTS DOVE OBJECT_TYPE = '??'

Per continuare ... USER_TAB_COLS per le colonne della tabella

Saluti K

Uso MigrateDB per questo. Ti permette di creare query che fanno cose come verificare l'esistenza di determinate tabelle, colonne, righe, indici, ecc. Per un dato database e usare quelle come & Quot; test. & Quot; Se un test fallisce, innesca un & Quot; action & Quot; (che è solo un'altra query che sa come risolvere il problema.)

MigrateDB supporta più piattaforme di database (è possibile specificare il quot! &; verificare la query di esistenza tabella " per ogni piattaforma, ad esempio), test completamente configurabili (è possibile crearne uno personalizzato), viene fornito con test Oracle abbastanza completi e possono essere eseguiti tra " solo audit " in modo che ti dica solo quali sono le differenze.

È una soluzione piacevole e robusta.

Se stai usando JDBC semplice, dovresti provare a utilizzare questo metodo: DatabaseMetadata.getTables e altri metodi simili disponibili nella classe metadati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top