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

时间:2018-08-30 08:03:51

标签: java database maven sqlite

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

  

\ ProjectName \ src \ resources \ database \ database.db

如果我将应用程序捆绑到jar中,则位于:

  

\ 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文件,则会得到:

  

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

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

  

私有静态最终字符串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数据库文件?

1 个答案:

答案 0 :(得分:0)

有几个问题。

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

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

最后一个潜在的问题是您需要指定正确的软件包名称,并且文件应该打包到jar中。 \ProjectName\src\resources中的文件进入哪个包?似乎您没有使用默认的Maven结构。假设projectRoot/src/main/resources/pom.xml中,则应将文件放入projectRoot中。这样,maven会将资源文件放入jar中。

总而言之,如果将文件放入projectRoot/src/main/resources/database/database.db,则文件将进入database.database包中,并且正确的JDBC URL为:

jdbc:sqlite::resource:database/database.db