Файл базы данных, к которому я хочу подключиться, находится по адресу:
\ProjectName\src\resources\database\database.db
Если я свяжу свое приложение в банку, оно будет расположено по адресу:
\ProjectName\target\ProjectName-0.0.1-SNAPSHOT-jar-with-dependencies.jar\resources\database\database.db
Эта папка находится в
C:\Users\Username\Documents\JavaProjects\
Мой подход в коде:
private static final String CONNECTION = "jdbc:sqlite:" + System.getProperty("user.dir") + "\\ProjectName-0.0.1-SNAPSHOT-jar-with-dependencies.jar\\resources\\database\\database.db";
try(final Connection connection = DriverManager.getConnection(CONNECTION)) {
final Statement statement = connection.createStatement();
statement.setQueryTimeout(10);
statement.executeUpdate(stmt);
connection.close();
} catch (SQLException e) {
//...
}
Если я дважды щелкну файл ProjectName-0.0.1-SNAPSHOT-jar-with-dependencies.jar, я получу:
path to C:\Users\Username\Documents\JavaProjects\ProjectName\target\ProjectName-0.0.1-SNAPSHOT-jar-with-dependencies.jar\resources\database\database.db does not exist.
Если я изменю строку подключения на:
private static final String CONNECTION = "jdbc:sqlite::resource\resources\database\database.db";
тогда я получаю:
path to C:\Users\Username\Documents\JavaProjects\ProjectName\target:resource does not exist
Я использую maven с этими зависимостями:
<dependencies>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.7.2</version>
</dependency>
</dependencies>
Как я могу получить доступ к файлу базы данных sqlite внутри файла .jar?




Есть несколько проблем.
Согласно документация префикс для базы данных пути к классам - jdbc:sqlite::resource:. Обратите внимание на точку с запятой после ресурса.
Следующая проблема заключается в том, что вам нужно использовать обычные косые черты (а не обратные косые черты), когда вы указываете путь пакета к файлу внутри jar.
И последняя потенциальная проблема заключается в том, что вам нужно указать правильное имя пакета и файл должен быть упакован в jar. В какой пакет попадают файлы с \ProjectName\src\resources? Не похоже, что вы используете структуру maven по умолчанию. Вы должны поместить файл в projectRoot/src/main/resources/, учитывая, что pom.xml находится в projectRoot. Таким образом, maven поместит файл ресурсов в банку.
Подводя итог, если вы поместите файл в projectRoot/src/main/resources/database/database.db, файл попадет в пакет database.database, и правильный URL-адрес JDBC будет:
jdbc:sqlite::resource:database/database.db