【问题标题】:UCanAccess relative path to Access database fileUCanAccess Access 数据库文件的相对路径
【发布时间】:2016-05-29 14:56:52
【问题描述】:

我为自己编写了一个与 Access 数据库文件配合使用的简单程序。 我用绝对路径连接db:

String path = "jdbc:ucanaccess://D:/Development/20_Eclipse/Budget/data/Budget.accdb";
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        this.conn = DriverManager.getConnection(path);

当我在其他地方使用可运行的 jar 时,这条路径(可以理解)不起作用。所以我尝试了相对路径,但它们也不起作用。

然后我尝试使用构建路径

String path = "jdbc:ucanaccess://" + helper.programmPathForDB() + "/data/Budget.accdb";

helper.programPathForDB() 在哪里这样做:

public String programmPathForDB()
{
    String tempPath = this.getClass().getResource( "." ).toString();
    String path = tempPath.substring(6, (tempPath.length()-12));

    return path;
}

这仅在我通过 IDE (Eclipse) 启动程序时有效。当我在其他地方启动 jar 时它不起作用。

我该如何解决这个问题?

【问题讨论】:

  • 是与jar的位置关系还是应用程序的启动位置?

标签: java database eclipse path ucanaccess


【解决方案1】:

听起来您希望将数据库文件放在相对于 JAR 文件位置(例如,子文件夹)的文件夹中。如果是的话,那么

Get location of JAR file

就如何确定 JAR 文件的位置提供一些建议。

但是,您应该记住,将数据库文件放在那里可能不是一个好主意。根据应用程序的部署方式,这样的位置可能会拒绝对没有提升权限的用户进行写访问(例如,Windows 下的%ProgramFiles%)。此外,移动 JAR 文件而不移动数据库文件可能会破坏您的应用程序。

所有现代操作系统都提供了众所周知且可发现的位置,应用程序可以在其中安全地放置不是(可执行)应用程序本身不可分割的一部分的“东西”。例如,Windows 为用户特定的位置提供%APPDATA%%LOCALAPPDATA%,为需要在所有用户之间共享的资源提供%PUBLIC%。您应该考虑为您的数据库文件使用其中一个位置(的子文件夹)。

【讨论】:

  • 非常感谢,明天我会看看你的链接。我在某些设备上安装我的项目时遇到了一些问题。通过您对提升权限的解释,这是有道理的,因为我试图将所有包容性数据库安装到 ProgramFiles。当我在 APPData 下拥有数据库时,它的路径在每台 Windows 电脑上都相同,还是?
  • 绝对路径在每台机器上可能不一样,但每台机器都会有一个环境变量,可以用来确定实际路径。这就是我在上面使用“可发现”一词时的意思。
【解决方案2】:

所以在上面的 Gord Thompson 的帮助下,我通过在 APPDATA 下部署数据库并使用环境变量 + 我的项目路径解决了这个问题:

String path = "jdbc:ucanaccess://" + System.getenv("APPDATA") + "/Budget/data/Budget.accdb";

【讨论】:

    【解决方案3】:

    UCanAccess 连接 URL 必须始终以 jdbc:ucanaccess:// 开头,后跟数据库文件的路径。

    对于相对路径(例如,src/main/resources/testDB.accdb),

    jdbc:ucanaccess://src/main/resources/testDB.accdb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2010-12-22
      相关资源
      最近更新 更多