是否可以访问可执行 JAR 之外的 SQLite 数据库文件?

Posted

技术标签:

【中文标题】是否可以访问可执行 JAR 之外的 SQLite 数据库文件?【英文标题】:Is it possible to access a SQLite database file outside of an executable JAR? 【发布时间】:2011-03-28 15:28:17 【问题描述】:

我有一个部署为可执行 JAR 文件的应用程序。最初,这个 JAR 文件将与 mysql 数据库通信,但最近我决定改用 SQLite。但是,在测试时,我发现从 JAR 文件运行我的应用程序时,我无法访问我的 SQLite 数据库文件。

我正在使用来自以下网站的 JDBC 驱动程序:http://zentus.com/sqlitejdbc/index.html

有什么我必须做的解决方法吗?

该驱动程序在我的 Eclipse 环境中测试时运行良好,但在 JAR 文件中似乎无法独立运行。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

嗯,这里是“工作目录”这样的术语。它是您的应用程序启动的目录。因此,应用程序中的每个“相对”路径通常都相对于这个“工作目录”。

现在让我们回到您的问题。当您设置文件的路径时,您可以将其设为相对、绝对或相对于 JAR 内部目录根目录,具体取决于您创建文件和设置路径的方式。

因此,只需重新检查您的应用程序中的路径设置方式,并尝试使用相对路径,从相应目录运行您的应用程序。

【讨论】:

我尝试使用 C:\ 驱动器上文件的硬编码路径进行测试,仅用于测试。以下不起作用: Class.forName("org.sqlite.JDBC");连接连接 = DriverManager.getConnection("jdbc:sqlite:C:\\test.db");我也尝试使用 Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");但当然这不起作用,因为工作目录可能在 JAR 文件中,对吧?理想情况下,我希望我的 .db 文件位于 JAR 文件旁边。可以吗?:Connection conn = DriverManager.getConnection("jdbc:sqlite:..\\test.db"); 不,工作目录不在 JAR 中。尝试file://C:/some/dir 指定数据库路径的样式。 感谢您的建议,但事实证明,如果我使用 Eclipse 的导出功能,则一切正常。当我使用 jar 命令使用自己的命令字符串时,它无法正常工作。奇怪,但因为太棒了,所以去 Eclipse!

以上是关于是否可以访问可执行 JAR 之外的 SQLite 数据库文件?的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 库可以嵌入(链接)到 Delphi 可执行文件吗?

eclipse打包可执行jar文件出错

Gradle:分发可执行的混淆 Jar 文件

在可执行 jar 中访问 derby 数据库

Spring Boot 可执行 jar 无法访问索引页面

从 Gradle 创建可执行 jar 文件并在 maven 中导入 jar