2013-04-12 9 views
9

Używam wbudowanej bazy danych H2 dla mojej aplikacji. Chciałbym zawrzeć wszystko, czego potrzebuje aplikacja w swoim własnym Jar, , w tym jego bazę danych, jeśli to możliwe. Moja aplikacja nie musi tworzyć plików tymczasowych ani niczego, więc w zasadzie użytkownik po prostu uruchamia Jar.Pakuj i używaj osadzonej bazy danych (plik H2.db) wewnątrz słoika?

Czy można osadzić bazę danych w słoiku i mieć możliwość zapisania nowych rekordów, a także tylko INSERT, a także tylko ? EDYCJA: Aby wyjaśnić, nie zamierzam osadzić słoja sterownika H2 w moim słoiku dystrybucji, Czekam na osadzenie pliku bazy danych h2 (someDatabase.h2.db plik) wewnątrz Jar i nadal być w stanie napisać/przeczytaj z tej bazy danych.

Odpowiedz

9

Jeśli chcesz osadzić plik myDatabase.h2.db wewnątrz .jar, możesz to zrobić, ale będziesz mieć dostęp tylko do odczytu do bazy danych. Ponieważ pliki .jar są tylko do odczytu, nie można ich modyfikować, a zatem nie można wykonać INSERT, DELETE ani żadnego polecenia DDL.

Poniżej znajduje się wyjaśnienie, w jaki sposób osadzić je w trybie tylko do odczytu.

Według H2's documentation:

JDBC URL "jdbc:h2:~/myDatabase" opowiada H2 Silnik szukać pliku bazy danych o nazwie myDatabase.h2.db w katalogu domu bieżącego użytkownika.

JDBC URL "jdbc:h2:file:/myDatabase" opowiada H2 Silnik szukać pliku bazy danych o nazwie myDatabase.h2.db w bieżącym katalogu (gdzie program java został stracony).

Jeśli umieścisz plik h2.db wewnątrz .jar, nie będzie on dostępny w prosty sposób. Jest dostępny tylko jako plik w pliku zip.

Aby H2 Uset niego, trzeba użyć zip jako URL:

jdbc:h2:zip:~/data.zip!/test 

Zobacz więcej w "Read Only Databases in Zip or Jar File".

Po osadzeniu pliku jako zasobu w słoiku można uzyskać jego względny adres URL. Korzystanie ...

MyClass.class.getClassLoader().getResource("myDatabase.h2.db")

... dostaniesz coś takiego:

jar:file:/C:/folder1/folder2/myJar.jar!/myDatabase.h2.db

Następnie można manipulować go jako String i przekazać jako URL JDBC podłączenia do H2.

+0

zobacz moje Edycja powyżej. Bardziej chce osadzić sam plik bazy danych (np. Plik SomeDatabase.h2.db "wewnątrz mojego słoika, a nie słoik sterownika – SnakeDoc

+1

w porządku, daj mi minutę, aby to sprawdzić – acdcjunior

+0

@acdcjunion dzięki tony! – SnakeDoc