2012-05-16 29 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应用程序中创建跟踪日志。比较两个痕迹。