2008-09-30 5 views
28

Im Moment verwenden wir HSQLDB als eingebettete Datenbank, aber wir suchen nach einer Datenbank mit weniger Speicherbedarf, da das Datenvolumen wächst.Einbetten der Java-h2-Datenbank programmgesteuert

Derby/JavaDB ist derzeit keine Option, da Eigenschaften global in den Systemeigenschaften gespeichert werden. Also dachten wir an h2.

Während wir HSQLDB verwendet haben, haben wir ein Server-Objekt erstellt, die Parameter gesetzt und gestartet. Dies wird here beschrieben (und als Beispiel in der Klasse org.hsqldb.test.TestBase angegeben).

Die Frage ist: Kann dies analog zur h2-Datenbank auch gemacht werden? Haben Sie dafür Codebeispiele? Beim Scannen der h2-Seite habe ich kein Beispiel gefunden.

Antwort

24

Vom Download, ich sehe, dass die Datei tutorial.html diese

import org.h2.tools.Server; 
... 
// start the TCP Server 
Server server = Server.createTcpServer(args).start(); 
... 
// stop the TCP Server 
server.stop(); 
63

hat Ja, Sie können im eingebetteten Modus H2 laufen. Sie verwenden nur die JDBC-Treiber und eine Verbindung zu einer eingebetteten URL wie folgt (ihrem Beispiel):

Diese Datenbank kann in eingebettetem -Modus oder im Server-Modus verwendet werden. Um es in Embedded-Modus zu verwenden, müssen Sie:

* Add h2.jar to the classpath 
* Use the JDBC driver class: org.h2.Driver 
* The database URL jdbc:h2:~/test opens the database 'test' in your user home directory 

Beispiel mit JDBC zu einer eingebetteten H2 Datenbank verbinden (angepasst von http://www.h2database.com/javadoc/org/h2/jdbcx/JdbcDataSource.html):

import org.h2.jdbcx.JdbcDataSource; 
// ... 
JdbcDataSource ds = new JdbcDataSource(); 
ds.setURL("jdbc:h2:˜/test"); 
ds.setUser("sa"); 
ds.setPassword("sa"); 
Connection conn = ds.getConnection(); 

Wenn Sie schauen, um Verwenden Sie H2 in einem reinen In-Memory/Embedded-Modus, Sie können das auch tun. Siehe diesen Link für mehr:

Sie nur eine spezielle URL in normalen JDBC-Code verwenden müssen, wie "jdbc: h2: mem: DB1".

+0

Ich muss die "Eigenschaften" richtig einstellen, um zu sagen: Ich muss - zumindest - das Verzeichnis festlegen, in dem sich die Datenbank befindet. Aus diesem Grund können wir Derby/JavaDB nicht verwenden, da es wie erwähnt Systemeigenschaften verwendet in der Frage. – Georgi

+0

Das Ausführen auf Port 8082, der Standard für h2 ist ebenfalls keine Option. – Georgi

+0

Ich verstehe nicht, was Sie sagen. Nichts hier verwendet Systemeigenschaften. Sie geben einen Speicherort für Dateien an. Es hängt von Ihrer App ab, wo Sie das tun. Sie können java.io.tmpdir dafür verwenden, wenn Sie möchten. Es läuft nicht auf einem Port im eingebetteten Modus. –

Verwandte Themen