2012-05-16 54 views
0

我有一個Java程序連接到一個mdb數據庫文件。在Eclipse中,它工作正常。現在我將程序導出爲jar文件。當我現在啓動程序並想要訪問同一個文件時,我收到消息從java jar連接到MDB文件 - 失敗

未找到數據源名稱,也未指定默認驅動程序。

我已經在Windows註冊數據庫爲ODBC源,但它不起作用。數據庫的路徑在Eclipse和jar中是相同的。也許是從jar中訪問一些外部源的問題?有什麼建議麼?

protected static Connection getAccessConnection(String fullPath) 
    throws ClassNotFoundException, SQLException 
    { 
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; 
    Class.forName(driver);  
    String url = "jdbc:odbc:Driver=" 
     + "{Microsoft Access Driver (*.mdb)};" 
     + "DBQ=" 
     + fullPath.replace("\\", "/"); 
    String username = ""; 
    String password = ""; 
    Connection result = 
     DriverManager.getConnection(url, username, password); 
    return result; 
    } 
+0

爲什麼在使用odbc時需要db路徑? – Satya

+0

我使用連接結果= \t DriverManager.getConnection(url,username,password);在java中連接數據庫,使用url = jdbc:odbc:Driver = {Microsoft Access Driver(* .mdb)}; DBQ = C:/xx/xx/Desktop/gfs-tmp/DB5.MDB –

+0

你可以試試使用此簡單代碼連接結果= \t DriverManager.getConnection(「jdbc:odbc:」,,);並看看它是否有效 – Satya

回答

0

看來你使用不同版本的Java:64位.jar模式和32位在Eclipse模式。您可以使用ProcessExpliorer或其他類似工具進行檢查。根據:http://www.selikoff.net/2011/07/26/connecting-to-ms-access-file-via-jdbc-in-64-bit-java/

似乎連接到Access數據庫字符串是不同的32位和64位環境。在32位,你可以使用:

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};... 

在64位:

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};... 

我想你可以嘗試都和第一個使用該作品(拋出異常,如果這兩個不工作)。這樣你的應用程序就可以在32位和64位JRE上工作。

如果您在Eclipse和.jar使用相同的JRE:

在ODBC管理員有「跟蹤」選項卡。啓用跟蹤並從Eclipse運行您的應用程序。保存此跟蹤日誌,然後從.jar應用程序中創建跟蹤日誌。比較兩個痕跡。