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

问题描述 投票:2回答:3

我为自己编写了一个简单的程序,它与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)启动程序时。当我在其他地方启动jar时它不起作用。

我该如何解决这个问题?

java database eclipse path ucanaccess
3个回答
1
投票

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

Get location of JAR file

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

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

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


1
投票

所以在上面的Gord Thompson的帮助下,我通过在APPDATA下部署数据库并使用Envirement Variable + my Project路径来解决它:

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

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.