2014-05-01 13 views
21

Ich benutze JDBC und erstellt h2 Datenbank usaDB von SQL-Skript. Dann habe ich alle Tabellen mit jdbc gefüllt.Wie sieht man alle Tabellen in meiner h2 Datenbank bei localhost: 8082?

Das Problem ist, dass, nachdem ich eine Verbindung zu usaDB bei localhost: 8082 Ich kann nicht auf dem linken Baum meine Tabellen sehen. Es gibt nur die Datenbank INFORMATION_SCHEMA und rootUser, die ich für die Erstellung usaDB angegeben habe.

Wie kann ich den Inhalt von Tabellen in meiner h2-Datenbank anzeigen?

Ich versuchte Abfrage SELECT * FROM INFORMATION_SCHEMA.TABLES.

Aber es gab viele Tabellennamen mit Ausnahme der von mir erstellten zurück. Mein Schnappschuss:

enter image description here

+2

Überprüfen Sie Ihre Verbindungszeichenfolge in JDBC. Möglicherweise stellen Sie eine Verbindung zu einer anderen Datenbank her. Aber nachdem Sie eine neue Datenbank erstellt haben, haben Sie vergessen, diesen neuen Datenbanknamen in Ihre neuen Tabellen aufzunehmen. Wie: 'create newDb.table_name' fehlte, glaube ich. Daher können Tabellen in der Standarddatenbank erstellt werden, mit der Sie über JDBC verbunden sind. –

+0

Danke aber das Erstellen usaDB Schema hat explizit nicht geholfen. Von jdbc kann ich meine Tabellennamen und Spalten abrufen, aber nicht bei localhost: 8082. –

+0

Was ist der Unterschied zwischen 'jdbc' und' localhost: 8082' Einstellungen? –

Antwort

1

Version der JAR-Datei und installiert h2-Datenbank identisch sein sollte.

3

Ich habe genau dieses Problem erfüllt.

Von dem, was Sie beschreiben, nehme ich an, dass Sie Ihre jdbc mit dem "echten" h2 Server verbinden, aber Sie verbinden auf Web-Anwendung mit der Datenbank durch den falschen Modus (embedded-in-memory mode, alias h2mem). Das bedeutet, dass h2 eine neue In-Memory-Datenbank erstellt, anstatt Ihre tatsächliche gespeicherte Datenbank zu verwenden.

Bitte stellen Sie sicher, dass, wenn Sie auf diese Datenbank zu verbinden, verwenden Sie den Modus Generisches H2 (Server), NICHT Generisches H2 (Embedded). Sie können auf das Bild unten verweisen.

enter image description here

29

hatte ich das gleiche Problem und die Antwort scheint wirklich dumm zu sein: wenn Sie Ihren Datenbanknamen eingeben, sollten Sie nicht „.h2.db“ Suffix hinzufügen, zum Beispiel, wenn Sie db-datei "D: \ somebase.h2.db" Ihre Verbindungszeichenfolge sollte lauten: "jdbc: h2: Datei:/D:/somebase". Auf andere Weise erstellt jdbc eine neue leere Datenbankdatei mit dem Namen "somebase.h2.db.h2.db" und Sie sehen, was Sie sehen: nur Systemtabellen.

+0

Ja, es ist auch eine mögliche Ursache –

+0

Danke, @ Le_Enot/WHat ein dummer Fall. –

6

Dieses Problem trieb mich um den Dreh und neben dieser Seite las ich viele (viele!) Andere, bis ich es gelöst habe.
Mein Use Case war zu sehen, wie ein SpringBatch-Projekt in STS mit :: Spring Boot :: (v1.3.1.RELEASE) mit der H2-Datenbank verhalten würde; um Letzteres zu tun, musste ich in der Lage sein, die H2-Konsole zum Abfragen der DB-Ergebnisse des Batch-Laufs laufen zu lassen.

Das ist, was ich tat und fand heraus:

  1. ein Webprojekt in STS Erstellt mit Spring Boot: enter image description here

    • addierten die folgenden auf die pom.xml des letzteren: enter image description here
    • Added eine Spring-Konfigurationsdatei wie folgt zum Projekt: enter image description here Das löst das Webprojekt Mängel in STS. Wenn Sie das Projekt jetzt ausführen, können Sie die H2-Konsole zugreifen, wie folgt: http://localhost:8080/console enter image description here
  2. Jetzt ein SpringBatch Projekt in STS erstellen wie folgt (die alternative Methode erstellt eine andere Vorlage meisten Klassen fehlt für persistierende . Daten 2 Diese Methode erzeugt Projekte: eine komplette , und der andere ein anfänglichen Über die komplette im folgenden):.. enter image description here

    • Das mit STS erstellte SpringBatch-Projekt verwendet eine H2-In-Memory-Datenbank, die nach Abschluss der Anwendungsausführung geschlossen wird. Sobald Sie es ausführen, können Sie dies in der Protokollausgabe sehen.
    • Also, was wir brauchen, ist eine neue DataSource zu erstellen, die den Standard überschreibt, der mit dem Projekt ausgeliefert wird (wenn Sie interessiert sind, sehen Sie sich einfach die Log-Nachrichten an und Sie werden sehen, dass es eine Standard-Datenquelle verwendet osjde EmbeddedDatabaseFactory mit den folgenden Parametern: von erstellt
      Start eingebettete Datenbank: url = 'jdbc: hsqldb: mem: testdb', Benutzername = 'sa')
    • es also, Startet einen im Speicher und schließt ihn dann. Sie haben keine Chance, die Daten mit der H2-Konsole zu sehen. es ist gekommen und gegangen. So
    • , erstellen Sie eine Datasource wie folgt: enter image description here
    • Sie können natürlich eine Eigenschaftendatei verwenden, die Parameter auf der Karte, und Profile für verschiedene Datasource Instanzen ... aber ich schweife ab.
    • Stellen Sie nun sicher, dass Sie das Bit, auf das der rote Pfeil im Bild zeigt, auf einen Speicherort auf Ihrem Computer setzen, auf dem eine Datei dauerhaft gespeichert werden kann.
    • Ausführen des SpringBatch (komplette Projekt) Sie sollten nun eine db-Datei an dieser Stelle haben, nachdem es läuft (Personendaten persistierenden)
    • Führen Sie das Webprojekt Sie zuvor in diesen Schritten konfiguriert, und Sie erhalten: =) sehen Sie Ihre Daten, und alle Batch-Job und Schritt ausführen Daten (et voila!): enter image description here Schmerzhaft, aber lohnend. Hoffe, dass es hilft Ihnen, wirklich BOOTSTRAP: =)
11

Sie den SHOW Befehl verwenden können:

grammar

Mit diesem Befehl können Sie listet die Schemata, Tabellen oder Spalten einer Tabelle. Beispiel:

SHOW TABLES 
+0

Er möchte die Tabellen sehen, die er erstellt hat. – aliopi

0

In meinem Fall wurde das Problem durch die Tatsache verursacht, dass ich den h2 Benutzernamen, Passwort in Java nicht eingestellt habe. Leider hat Spring keine Fehler gezeigt, daher war es nicht einfach herauszufinden.Das Hinzufügen dieser Zeilen zu Datasource-Methode hat mir geholfen, das Problem zu beheben:

dataSource.setUsername("sa"); 
dataSource.setPassword(""); 

Auch sollte ich das Schema angegeben haben, wenn Tabellen in schema.sql Erstellen

0

Auswahl Generisches H2 (Server) für mich gelöst. Wir sind versucht, das Standard-Generic H2 (Embedded) zu verwenden, das falsch ist.

1

Es ist eine alte Frage, aber ich stieß auf das gleiche Problem. Schließlich fand ich heraus, dass die Standard-JDBC-URL eher auf einen Testserver als auf meine Anwendung verweist. Nach der Korrektur konnte ich auf die richtige DB zugreifen.

Ich habe versucht, sowohl mit Generic H2 (Embedded) und die Generic H2 (Server) -Optionen, beide so lange, wie die JDBC URL: korrekt angegeben ist.

enter image description here