UCanAccess Access数据库文件的相对路径

时间:2016-02-17 18:18:01

标签: java database eclipse path ucanaccess

我为自己编写了一个简单的程序,它与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);

当我在其他地方使用runnable 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)启动程序时才有效。当我在其他地方启动罐子时,它无法工作。

如何解决此问题?

3 个答案:

答案 0 :(得分:1)

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

Get location of JAR file

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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