【问题标题】:How can I specify a RELATIVE JDBC SQLite url (path?)如何指定相对 JDBC SQLite url(路径?)
【发布时间】:2012-01-02 10:08:17
【问题描述】:

两天来我一直在努力完成这项工作,并尝试了所有我能找到的建议。唉,到目前为止还没有成功。

这就是我想要做的:我正在构建一个小型(java swing)桌面数据库应用程序。我正在使用 Netbeans 7.0 和 SQLite,发现 http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC 的 JDBC 驱动程序可以正常工作,只要我在 JDBC URL 中指定绝对路径:

jdbc:sqlite://Users.../lib/db/ithildin.db

这是它在 Netbeans 的服务 -> 数据库选项卡中的外观,使用绝对 URL:

打开连接,然后表节点显示可用表。

但是因为我打算将这个应用程序分发给其他人,所以使用绝对路径是行不通的。根据我在这里和那里阅读的内容,似乎还可以指定 SQLite 数据库文件的相对路径,但无论我尝试什么,我都无法让它工作。

奇怪的是,当我在 Netbeans 中创建连接时,当我将 sqlite jdbc 驱动程序 jar 和 sqlite 数据库文件都放在 /lib 的 /db 子目录中(在 Netbeans 项目目录中)时,它最初似乎可以工作:

当我打开新连接时,它会保持这种错觉 -

但是当我打开“表格”节点时,结果却是空的:

类似地,这个连接似乎是有效的,但当我尝试使用它时——例如在“从数据库生成实体类”中,它告诉我该数据库中没有任何表。

有人知道解决办法吗?我会很感激的。

露西恩

【问题讨论】:

    标签: sqlite url netbeans jdbc relative-path


    【解决方案1】:

    我已按照与您相同的步骤进行操作,并且我的发现表明新建连接向导中的相对路径是相对于 NetBeans 的工作目录的,该目录是 NetBeans 的安装目录。

    例如,在您的连接字符串中,您正在“连接”到位于<NetBeans-Install-Dir>/ithildin-13-11-11.db 的数据库。由于该数据库不存在,SQLite 正在为您创建它,这给了您所看到的“错觉”。在我的测试中,我尝试使用相对路径连接的数据库是在 NetBeans 安装目录中创建的。

    换句话说,一切都按设计进行。

    在您的代码中,您可以使用相对路径,并且它应该相对于项目目录的顶部。在 NetBeans 的数据库服务中,您需要使用绝对路径连接到(在您的项目中)存在的数据库,或者您需要提供从 NetBeans 的安装目录开始的相对路径。

    我的建议是在代码中使用相对路径,在新建连接向导中使用绝对路径。

    【讨论】:

    • 嗨,非常感谢!我检查了ithildin-13-11-11.db 的空副本,确实,我找到了它——虽然不在 Netbeans 安装目录中,但在项目根目录中。那可能是因为我在 Mac 上,并且“Netbeans 安装目录”是一个打包的 .app 文件。我将尝试您对 PU 中的相对路径和 DB 连接选项卡中的绝对路径的建议。再次感谢!!
    • 我刚刚尝试过,它的工作方式与您描述的完全一样(除了它似乎没有安装安装目录) - 事实证明数据库连接选项卡中的相对路径不起作用,但是它确实在persistence.xml 的PU 中工作。如果它们都正常,应用程序似乎会自动选择工作连接,否则它会选择正常的连接。所以这似乎可以正常工作:我希望它仍然可以在部署的应用程序中工作:)
    • 很高兴我能帮上忙。不要忘记将此答案标记为已接受,以便其他人知道您的问题已得到解答。
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多