2014-05-22 5 views
32

Ich folgte der Quickstart-Anleitung auf der h2-Datenbank-Website, um eine neue Datenbank eine Tabelle zu erstellen und einige Daten einzufügen. Die Anwendung läuft reibungslos und kann problemlos in die Datenbank schreiben und lesen.Warum schreibt mein embedded h2-Programm in eine .mv.db-Datei

Kurz h2

  • die h2 * .jar zum Classpath hinzufügen (H2 keine Abhängigkeiten hat)
  • Verwenden Sie den JDBC-Treiber Klasse: org.h2.Driver
  • Die Datenbank URL jdbc: h2: ~/Test öffnet den Datenbank-Test in Ihrem Benutzerverzeichnis
  • Eine neue Datenbank wird automatisch erstellt

Jetzt möchte ich die Daten mit der Web-Frontend-Konsole h2 betrachten, aber jedes Mal, wenn ich versuche, meine Datenbank zu öffnen, erstellt sie einfach eine neue Datenbank.

Nach langer Suche habe ich festgestellt, dass meine Java-App, die die h2 embedded-Version verwendet, in eine Datei namens ".mv.db" schreibt, während das Web-Frontend die Datei ".h2.db" erstellt mehr Sinn für mich)

Auch wenn meine App schreibt in die Datenbank verwendet es extreme Mengen an Speicherplatz (80 MB für ~ 600 ganzzahlige Werte)
Wie kann ich die ". h2.db" Erweiterung für meine eingebettete Datenbank verwenden?

+2

Verwenden Sie den 1.4.x Beta-Version oder der stabile 1.3.x? Zu wissen, welche spezifische Version von H2 du verwendest, wird dies ein wenig einschränken. –

Antwort

38

Dies ist jetzt automatisch aktiviert seit Version 1.4.177 Beta (2014-04-12).

Sie es durch Hinzufügen ;MV_STORE=FALSE und ;MVCC=FALSE in die Datenbank URL deaktivieren

Standardmäßig ist die MV_STORE Option aktiviert, so dass er die neue MVStore Lagerung verwendet. Die MVCC-Einstellung ist standardmäßig auf die gleichen Werte wie die MV_STORE-Einstellung festgelegt, so dass sie auch standardmäßig aktiviert ist. Für Tests können beide Einstellungen durch Anhängen von "; MV_STORE = FALSE" und/oder "; MVCC = FALSE" an die Datenbank-URL deaktiviert werden.

http://www.h2database.com/html/changelog.html

Sie uns sagen sollten, was Sie genaue Version von H2 verwenden.

+0

Danke, das hat es gelöst. Ich habe unwissentlich die Beta-Version benutzt und nachdem ich die Bibliothek auf den neuesten Stand heruntergestuft habe, hat es gut funktioniert. – FelixZett

10

.mv.db -Dateien sind für den kommenden/Beta-Speichertyp "MVStore" für H2.

ist hier von den http://www.h2database.com/html/changelog.html:

Neuem Tischmotor "org.h2.mvstore.db.MVTableEngine", die intern die MVStore verwendet, um Daten zu beharren. Um es auszuprobieren, fügen Sie "; DEFAULT_TABLE_ENGINE = org.h2.mvstore.db.MVTableEngine" an die Datenbank-URL an. Dies ist immer noch sehr experimentell, und viele Funktionen sind noch nicht unterstützt. Die Daten werden in einer Datei mit dem Suffix .mv.db gespeichert.

+0

Dies ist die einzige Zeile, die ich auch gefunden habe, aber ich habe dieses Argument nie irgendwo angehängt ... – FelixZett

+2

Der MVStore-Speicher ist jetzt der Standard in Version 1.4.x Beta. –

+0

Ich kann bestätigen, dass die Version 1.4.190 von h2 einen .h2.db anstelle von .mv.db erzeugt (auch wenn ich MVCC = TRUE gesetzt habe; MULTI_THREADED = TRUE in jdbc url). was ich tun muss, ist MC_STORE = TRUE, um h2 zu zwingen, .mv.db-Datei zu verwenden. – bob