UCanAccess Access 数据库文件的相对路径
UCanAccess relative path to Access database file
我为自己编写了一个使用 Access 数据库文件的简单程序。
我使用绝对路径连接到数据库:
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 文件位置相关的文件夹中(例如,子文件夹)。如果是,那么
Get location of JAR file
就如何确定 JAR 文件的位置提供了一些建议。
但是,您应该记住,将数据库文件放在那里可能不是一个好主意。根据应用程序的部署方式,这样的位置可能会拒绝没有提升权限的用户的写入访问权限(例如,Windows 下的 %ProgramFiles%
)。此外,移动 JAR 文件而不移动数据库文件可能会破坏您的应用程序。
所有现代操作系统都提供众所周知且可发现的位置,应用程序可以在其中安全地放置 "stuff" 不是(可执行)应用程序本身的组成部分。例如,Windows 为用户特定位置提供 %APPDATA%
和 %LOCALAPPDATA%
,同时为需要在所有用户之间共享的资源提供 %PUBLIC%
。您应该考虑将这些位置之一(的子文件夹)用于您的数据库文件。
因此,在上面 Gord Thompson 的帮助下,我通过在 APPDATA 下部署数据库并使用环境变量 + 我的项目路径解决了这个问题:
String path = "jdbc:ucanaccess://" + System.getenv("APPDATA") + "/Budget/data/Budget.accdb";
UCanAccess 连接 URL 必须始终以 jdbc:ucanaccess:// 开头,后跟数据库文件的路径。
对于相对路径(例如,src/main/resources/testDB.accdb),将是
jdbc:ucanaccess://src/main/resources/testDB.accdb
我为自己编写了一个使用 Access 数据库文件的简单程序。 我使用绝对路径连接到数据库:
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 文件位置相关的文件夹中(例如,子文件夹)。如果是,那么
Get location of JAR file
就如何确定 JAR 文件的位置提供了一些建议。
但是,您应该记住,将数据库文件放在那里可能不是一个好主意。根据应用程序的部署方式,这样的位置可能会拒绝没有提升权限的用户的写入访问权限(例如,Windows 下的 %ProgramFiles%
)。此外,移动 JAR 文件而不移动数据库文件可能会破坏您的应用程序。
所有现代操作系统都提供众所周知且可发现的位置,应用程序可以在其中安全地放置 "stuff" 不是(可执行)应用程序本身的组成部分。例如,Windows 为用户特定位置提供 %APPDATA%
和 %LOCALAPPDATA%
,同时为需要在所有用户之间共享的资源提供 %PUBLIC%
。您应该考虑将这些位置之一(的子文件夹)用于您的数据库文件。
因此,在上面 Gord Thompson 的帮助下,我通过在 APPDATA 下部署数据库并使用环境变量 + 我的项目路径解决了这个问题:
String path = "jdbc:ucanaccess://" + System.getenv("APPDATA") + "/Budget/data/Budget.accdb";
UCanAccess 连接 URL 必须始终以 jdbc:ucanaccess:// 开头,后跟数据库文件的路径。
对于相对路径(例如,src/main/resources/testDB.accdb),将是
jdbc:ucanaccess://src/main/resources/testDB.accdb