H2 Db Start in Application

quidnovi

Erfahrenes Mitglied
Hi @ all :)

Trotz intensivem googelns habe ich keine Lösung gefunden.

Ich habe in Eclipse eine Applikation erstellt, welche eine eingebettete H2 Datenbank enthält.
Diese H2 Db benötigt eine Datei namens <namen>.db. Bei mir nennt sich diese h2.db.
In dieser <namen>.db sind alle Daten der Db gespeichert.
Wenn ich nun die Applikation aus Eclipse heraus starte, dann werden alle Daten aus der Db angezeigt und können auch verändert werden.

Nun exportiere ich diese Applikation aus Eclipse heraus und erzeuge eine runnable.jar.
Bei Start dieser runnable jar, wird die Datei h2.db sichtbar, ausserhalb der Anwendung neu angelegt und ist leer.

Nun habe ich ein massives Problem damit, nein, eigentlich sind es zwei.
Erstens: die Datei h2.db enhält keinerlei Daten.
Zweitens: auch wenn die Daten vorhanden wären, dann ist diese h2.db mit fast jedem Editor lesbar,
was unmöglich sein darf, da sensible Daten - wie Passwörter - darin enthalten sind.

Da ich nun davon ausgehe, dass ich einen krassen Denkfehler habe, bitte ich Euch, mir diesen zu nennen.

Meine Denke und vor allem Ziel:
Applikation so konfigurieren, dass die Daten bei Start in der runnable.jar enthalten sind und diese in keiner ausgelagerten Datei drinstehen, sich also alles innerhalb abspielt.

Bitte erklärt mir, wie ich das erwünschte zustande bringe, danke
quidnovi
 
Zuletzt bearbeitet:

Writtscher

Mitglied
Zu deinem Problem mit der H2 extern: Eine Embedded H2 Database innerhalb deines Jars ist nur Read-Only. Siehe hier http://www.h2database.com/html/features.html#database_in_zip .

Zu deinem Problem das die Datenbank ausgelesen werden kann: http://www.h2database.com/html/advanced.html#security_protocols . Jede Datenbank bzw. Zugriff auf eine Datenbank lässt sich verschlüsseln oder mit einem Passwort absichern. H2 bietet das auch.

Warum die Datenbank aber leer ist weiß ich nicht. Wie werden Daten denn eingespielt? Also initial?

Fazit: H2 Datenbank innerhalb eines Jars ist nur read-only wie alle anderen Files innerhalb eines Jars (Die Anwendung bzw. Queries werden langsamer). Wenn sie nicht read-only sein soll muss sie außerhalb liegen und Passwort gesichert sein.
 

quidnovi

Erfahrenes Mitglied
Schönen guten Morgen Writtscher :)

hab' Dank für Deine Info.
Hegte die Hoffnung, dass alles in der Applikation abläuft...nun gut, dann soll's so sein.

Somit werde ich mich eben mit der Verschlüsselung auch noch auseinander setzen :)
Evtl. melde ich mich wegen der Verschlüsselung nochmals

Vielen Dank nochmal, hast mir inzwischen sehr weiter geholfen :)
quidnovi
 
Zuletzt bearbeitet:

quidnovi

Erfahrenes Mitglied
So, habe fertig :D

eigentlich recht einfach - wenn man's weiß :rolleyes:

habe nun die aktuelle H2 herunter geladen, nach c:/User/ entpackt,
in der Class, welche zur DB verbindet
Java:
public static final String URL = "jdbc:h2:~/h2/bin/lib/h2/bin;CIPHER=AES";
public static final String DRIVER = "org.h2.Driver";
public static final String USER = "***";
public static final String PWDS = "*** ***";

eingetragen und die Db mittels einer dump.sql - in welcher alle Tabellen incl. der Daten gespeichert ist, über die H2 Konsole befüllt.
Anschließend das Projekt aus Ecplipse als runnable.jar exportiert.

Dann diese runnable und den Ordner H2 auf einen Stick kopiert.
Auf einem Laptop habe ich dann diese beiden Teile in C:/User/ kopiert, gestartet - und die Anwendung voll nützen können.
Die h2.db kann man wohl mit einem Editor öffnen, allerdings wird man nur kryptischen Zeichen angesichtig.

Vielen Dank an Writtscher, Youza und all jenen, welche mich bei meinem Projekt sehr unterstützt haben :)

Geholfen hat auch das Inet, nähmlich folgende Seite: http://www.claudiobernasconi.ch/2010/08/17/h2-embedded-java-db-getting-started/

So, nun bin ich mal beruhigt, dass das Ganze läuft.
Jetzt muss ich noch einiges an dieser Applikation herumschrauben, weswegen wir uns sicher wieder lesen werden :D

Dank nochmals an alle helfenden Geister hier :)
quidnovi