Откройте базу данных H2 из Classpath - PullRequest
0 голосов
/ 31 октября 2018

Я видел из документации H2, что вы можете открывать файлы на пути к классам .

Я пробовал разные URL-адреса (например, jdbc:h2:classpath:/myDatabase) при открытии соединения, но ни один из них, похоже, не нашел ресурс - но когда я пытаюсь MyClass.class.getClassLoader().getResourceAsStream("myDatabase"), он может найти его нормально.

База данных находится на пути к классам в src\test\resources.

Есть идеи, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

это работает для меня ... создает папку pher в classpath, а "pharmadatabase" - это имя моей базы данных. jdbc:h2:file:pher/~/pharmadatabase;

Вы можете увидеть путь ниже-

enter image description here

0 голосов
/ 12 ноября 2018
0 голосов
/ 05 ноября 2018

Вы можете найти файл myDatabase. При работе на месте и без упаковки, например, из среды IDE вы можете сделать:

URL res = MyClass.class.getResource("/myDatabase");
String url = "jdbc:h2:" + res.toString();

, который выведет полный путь к ресурсу, например jdbc:h2:file:/home/.../classes/myDatabase

Это не будет работать, если вы упакуете свое приложение в JAR или WAR. В этом случае myDatabase будет упаковано в ZIP-архив, чтобы процитировать это сообщение :

Основная проблема для архивированных баз данных и баз данных в classpath: вы не можете сделать реальный произвольный доступ. Вы можете читать только из поток. Требуется произвольный доступ, поэтому он моделируется так: Когда search (pos) больше текущей позиции, тогда пропускается (который в основном для чтения). Если позиция поиска меньше, то Поток закрыт и вновь открыт. Это очень медленно.

Поддержка ZIP доступна только для чтения на основе Дополнительно> Документация по подключаемой файловой системе :

zip: файловая система на основе zip-файла, доступная только для чтения. Формат: zip: / zipFileName! /FileName.

Вы, вероятно, должны указать путь к myDatabase, используя аргументы командной строки или системную переменную, и оставить его вне упакованного приложения.

...