Frage

Ich habe eine Java-Anwendung auf meinem Rechner zu schreiben und es funktioniert mit perfekt die DB I einrichten, aber wenn ich es vor Ort installiere es explodiert, weil die DB etwas anders.

Also ich bin in dem Prozess einen Code zu schreiben, das zu überprüfen:

  • A: Ich habe die DB Details bekam korrigieren

  • . B: Die Datenbank, die die Tabellen alles, was ich erwarten hat, und sie haben die richtigen Spalten

Ich habe eine nach unten bekam, aber ich habe keine Ahnung, wo mit B anfangen, irgendwelche Vorschläge?

Ziel DB für den aktuellen Client ist Oracle, aber die App kann auf SQL Server ausgeführt und konfiguriert werden. So eine generische Lösung würde geschätzt, ist aber nicht nessisary wie ich sicher bin, kann ich herausfinden, wie von dem anderen zu tun.

War es hilfreich?

Lösung

Sie werden die information_schema der Datenbank abfragen möchten, sind hier einige Beispiele für Oracle, jede Plattform ich etwas ähnliches bewusst bin, hat.

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

Andere Tipps

Sie könnten in der Lage sein, für diese eine Datenbank-Migration-Tool wie Liquibase verwenden - die meisten dieser Tools haben eine Möglichkeit, die Datenbank zu überprüfen. Ich habe keine Erfahrung aus erster Hand mit ihm so, es ist eine Vermutung.

Ich benutze DbUnit Datenbanken zu testen. Es ist eine Java-basierte Lösung, die gut integriert mit Junit . Es ist möglich, es mit so gut wie keine Java zu verwenden. Ich habe es in genau die gleichen Situation verwendet, wie Sie beschrieben, aber es sollte nahe genug, um zu arbeiten.

Die meisten generische Lösung wäre, um Abfragen auszuführen, mit select-Klausel die erwarteten coulmns aufweist und sich von Klausel mit Tabellennamen innerhalb try catch-Block. Sie können keine Daten setzen, wo Klausel als 1 = 2, um zu holen. Wenn Abfrage ausgeführt, ohne Ausnahme zu werfen, dann haben Sie die erwartete Tabelle und Spalten bekommen.

Das etwas andere Stück besser durch Skripting der Erstellung der Datenbank in erster Linie behandelt werden könne. Ein automatisierter Prozess gibt Ihnen eine bessere Chance, die beide identisch.

Ein weiterer Punkt wert ist, dass Sie Ihr Risiko minimieren, indem Sie Ihre devl und prod Umgebungen identisch zu machen - die gleiche Datenbankschema und Anbieter für beide. Ändern Sie die Umstände, die die zwei unterschiedlichen machen.

Schließlich sagt man nicht, was „etwas“ anders ist, aber manchmal sind diese unvermeidbar (z Oracle verwendet Sequenzen, SQL Server verwendet Identitäten). Hibernate können Ihnen vielleicht zuverlässigen zwischen den Anbietern wechseln helfen. Sie abstrahiert Details in einer Weise, dass Datenbanken Ändern bedeuten kann einen einzelnen Wert in einer Konfigurationsdatei zu ändern.

Was Sie benötigen, ist im Grunde Unit Tests für Ihre Datenbank. „Eine Spalte muss FOOBAR Namen vorhanden ist, muss der Typ Integer sein. Kein Fremdschlüssel kann usw. existieren.“

Das ist machbar mit einfachen JUnit und JDBC (fragen Sie die Tabelle für die Meta-Daten), wie Sie möchten, um sicherzustellen, dass Sie absolut sicher sind, was getan wird, das härter sein kann, wenn beispielsweise unter Verwendung DBUnit.

Sie können auf das Vorhandensein von Tabellen überprüfen, Spalten, Ansichten, usw. unter Verwendung dieser Tabellen in Oracle

USER_TABLES USER_VIEWS USER_PROCEDURE

(oder alles) USER_OBJECTS WHERE OBJECT_TYPE = '??'

Gang zu halten ... USER_TAB_COLS für Tabellenspalten

Viele Grüße K

Ich benutze MigrateDB für diese. Damit können Sie Abfragen erstellen, die für die Existenz von bestimmten Tabellen, Spalten, Zeilen, Indizes etc. für eine bestimmte Datenbank Dinge wie Check tun und solche, wie sie verwenden „Tests“. Wenn ein Test fehlschlägt, es löst eine „Aktion“ (was nur eine andere Frage ist, der weiß, wie das Problem zu beheben.)

MigrateDB unterstützt mehrere Datenbankplattformen (Sie die „überprüfen Tabelle Existenz Abfrage“ für jede Plattform, beispielsweise angeben), vollständig konfigurierbare Tests (Sie können Ihre eigene up machen), kommt mit ziemlich vollständige Oracle-Tests und kann sein laufen in „audit only“ -Modus, so dass es nur sagt, was die Unterschiede sind.

Es ist eine schöne, robuste Lösung.

Wenn Sie Normal JDBC verwenden, sollten Sie versuchen, diese Methode verwendet: DatabaseMetaData.getTables und andere ähnliche Methoden zur Verfügung, in der Metadatenklasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top