我要连接的数据库文件位于:
\ 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数据库文件?
答案 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