具有Java相对路径的MS-Access数据库

具有Java相对路径的MS-Access数据库,java,ms-access-2007,Java,Ms Access 2007,我有以下代码 Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ= D:\\work folder\\netzeus\\Project - Optimo (Phase 1)\\DB\\DonorsDetail.mdb"); 上述代码的问题是应用程序将不可移植。所以我所做的是 我将数据库文件复制到项目文件夹中 我试图将getConnection

我有以下代码

Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ= D:\\work folder\\netzeus\\Project - Optimo (Phase 1)\\DB\\DonorsDetail.mdb");
上述代码的问题是应用程序将不可移植。所以我所做的是

  • 我将数据库文件复制到项目文件夹中
  • 我试图将
    getConnection
    中的路径更改为

    连接conn=DriverManager.getConnection(“jdbc:odbc:Driver={Microsoft Access驱动程序(*.mdb)};DBQ=DonorsDetail.mdb”)


  • 不幸的是,这不起作用。有没有办法设置相对路径?我该怎么做呢?

    每当我想连接到数据库时,我都会这样做:

    String dbFileName = "D:/work folder/netzeus/Project - Optimo (Phase 1)/DB/DonorsDetail.mdb";//Using your database path
    String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};"+
            "DBQ="+dbFileName+";";
    Connection conn=DriverManager.getConnection(url);
    
    试试这个。如果出现错误,请检查拼写和文件夹名称

    编辑:

    当您想让它便携时,您可以将数据库放入
    C://
    中。只需加密数据库文件并硬编码密码即可打开数据库文件,如下所示:

    String dbFileName = "C:/DonorsDetail.mdb";
    String password = "your_password";
    String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};"+
        "DBQ="+dbFileName+";"+
        "Pwd="+password+";";
    

    请参见

    一种可能的解决方案是使用
    文件
    生成绝对路径
    字符串
    ,例如

    File dbFile = new File("DonorsDetail.mdb");
    String path = dbFile.getAbsolutePath();
    Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ= " + path);
    

    这将假定
    DonorsDetail.mdb
    是相对于应用程序执行上下文(即工作目录)

    我认为路径不能是相对的,因为我认为它是相对于驱动程序而不是应用程序的。最好是使用File#getAbsolutePath(或类似)并使用结果字符串,而不是使用@MadProgrammer复制,将db文件放入构建文件夹是否安全?然后路径将基于工作目录这基本上就是OP现在正在做的事情,并且想要做的事情avoid@MadProgrammer但我认为使用这段代码,他的第一个问题“应用程序将无法移植”得到了解决。如何解决
    dbFileName
    是一个绝对路径,它不是portable@MadProgrammer正确的。但如果我们将路径从“D:/work folder/netzeus/Project-Optimo(Phase 1)/DB/DonorsDetail.mdb”更改为“C:/DonorsDetail.mdb”,那么就可以了。因为C:/是所有人的共同点。仍然没有便携设备,那么Mac和基于Linux的操作系统呢?那些愚蠢的人(像我一样)把他们的应用程序放在C以外的其他驱动器上呢?以这种方式硬编码值不是一个可行的解决方案…希望使用类似的机制,感谢您正确显示它。