Java SQLite - 无法访问可执行jar内的.db文件

问题描述 投票:0回答:1

我要连接的数据库文件位于:

\项目名的\ src \资源\数据库\ database.db

如果我将我的应用程序捆绑到一个jar中,它位于:

\项目名\目标\项目名-0.0.1-SNAPSHOT-JAR-与-dependencies.jar \资源\数据库\ database.db

此文件夹位于

C:\ Users \用户名\文档\ 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文件,我得到:

C:\ Users \ Username \ Documents \ JavaProjects \ ProjectName \ target \ ProjectName-0.0.1-SNAPSHOT-jar-with-dependencies.jar \ resources \ database \ database.db的路径不存在。

如果我将连接字符串更改为:

private static final String CONNECTION =“jdbc:sqlite :: resource \ resources \ database \ database.db”;

然后我得到:

C:\ Users \ Username \ Documents \ JavaProjects \ ProjectName \ target:资源不存在的路径

我使用maven与这个依赖:

<dependencies>

<dependency>
  <groupId>org.xerial</groupId>
  <artifactId>sqlite-jdbc</artifactId>
  <version>3.7.2</version>
</dependency>

</dependencies>

如何在.jar文件中访问sqlite-database文件?

java database maven sqlite
1个回答
0
投票

有几个问题。

根据documentation,类路径数据库的前缀是jdbc:sqlite::resource:。请注意资源后面的分号。

下一个问题是,当您在jar中指定文件包路径时,需要使用常规斜杠(而不是反斜杠)。

最后一个潜在的问题是你需要指定正确的包名,文件应该打包到jar。来自\ProjectName\src\resources的文件包含哪些包?您似乎没有使用默认的maven结构。你应该把文件放到projectRoot/src/main/resources/,因为pom.xmlprojectRoot。这样maven会将资源文件放在jar中。

总而言之,如果你把文件放到projectRoot/src/main/resources/database/database.db,文件将进入database.database包,正确的JDBC URL将是:

jdbc:sqlite::resource:database/database.db
© www.soinside.com 2019 - 2024. All rights reserved.