Как работать со встраиваемой БД?

145
01 декабря 2021, 15:30

Я использую Intellij IDEA для сборки проекта(javafx + hibernate), но после создания jar файла база не может быть найдена (чисто теоретически я могу создать базу при первой попытке подключения, но мне нужно подключение к существующей). Собственно вопрос в том, как сконнектиться с базой после сборки проекта. В конфигурационном файле (hibernate.cfg.xml) я перепробовал все возможные написание относительных путей к базе и всё работает только если я укажу абсолютный путь. Но мне же надо распространять приложение. Как сделать так, чтобы после установки приложения база помещалась в папку относительно запускаемого файла? И как указать путь к ней? Или, если сам алгоритм не верен, как сделать правильно?

Answer 1

1) Складываете свою БД в ресурс, который пакуете внутри jar

2) При первом запуске читаете свою БД из ресурса, например так:

InputStream in = getClass().getResourceAsStream("/mybd.db"); 

3) Записываете БД в локальный каталог, относительно себя, например так:

OutputStream os = new FileOutputStream(new File("./mydb.db"));

4) Напускаете Hibernate на чтение БД из этого файла

Update (по следам дискуссии в комментариях)

Для того, чтобы каталог создавался в том же каталоге, где лежит архив JAR, нужно сделать что-то типа:

String currentPath=MyMainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 

Грубо говоря, определяем где находится ваш main() (а он лежит там же где находится сам JAR) и по этому пути создаем каталог куда кидаем свою БД.

READ ALSO
Удалить ссылку на последний элемент массива после удаления элемента массива

Удалить ссылку на последний элемент массива после удаления элемента массива

У меня есть следующий метод, который удаляет элемент массива объектов:

320
Как массиву или переменной назначить другой массив по ссылке? JAVA создание таблицы

Как массиву или переменной назначить другой массив по ссылке? JAVA создание таблицы

Начал изучать java и столкнулся с проблемой не получается сделать таблицу

260
Поменять столбцы местами в матрице

Поменять столбцы местами в матрице

При работе с матрицами, а именно с двумерным массивом назовем его int[][]a для замены строк мы можем сделать так:

171
В чем причина ошибки "cannot find symbol" [закрыт]

В чем причина ошибки "cannot find symbol" [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

218