我要连接的数据库文件位于:
\项目名的\ 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文件?
有几个问题。
根据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