我为自己编写了一个简单的程序,它与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)启动程序时才有效。当我在其他地方启动罐子时,它无法工作。
如何解决此问题?
答案 0 :(得分:1)
听起来您希望将数据库文件放在与JAR文件位置相关的文件夹(例如,子文件夹)中。如果是,那么
提供了一些有关如何确定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