2014-01-27 75 views
0

MS Access数据库我有以下代码与Java相对路径

Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ= D:\\work folder\\netzeus\\Project - Optimo (Phase 1)\\DB\\DonorsDetail.mdb"); 

与上面的代码的问题是应用程序将无法移植。所以我所做的就是

  1. 我复制数据库文件到项目文件夹
  2. 我试图改变路径在getConnection

    连接康恩=的DriverManager.getConnection(“JDBC:ODBC:驱动程序= {Microsoft Access Driver(* .mdb)}; DBQ = DonorsDetail.mdb“);

不幸的是,这并没有奏效。有没有办法设置相对路径?我该怎么做?

+2

我不认为路径可以是相对的,因为我认为它是相对于驱动程序而不是应用程序。最好的事情可能是使用File#getAbsolutePath(或类似的)并使用结果字符串代替 – MadProgrammer

+0

可能与http://stackoverflow.com/questions/15998802/how-to-give-a-relative-path-in-java重复-for-databse-so-that-when-we-put-it-on- – abiieez

+0

@MadProgrammer,将db文件放入build文件夹是否安全?那么路径将基于工作目录 – abiieez

回答

2

一个可能的解决方案是使用File来生成一个绝对路径String,例如...

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是相对于应用程序执行环境(即工作目录)

+0

想要使用类似的机制,谢谢你的正确显示。 – abiieez

0

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

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+";"; 

how to encrypt database

+0

这基本上是OP现在正在做什么,并且想要避免 – MadProgrammer

+0

@MadProgrammer但是我认为使用这段代码他的第一个问题“应用程序将不可移植”已解决。 – Aarav

+0

如何? 'dbFileName'是绝对路径,不可移植 – MadProgrammer