2014-01-27 76 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