从java jar文件连接到MDB-失败

从java jar文件连接到MDB-失败,java,database,jar,odbc,Java,Database,Jar,Odbc,我有一个连接到mdb数据库文件的java程序。在Eclipse中,它工作得很好。现在我将程序导出为jar文件。当我现在启动程序并希望访问同一个文件时,我收到消息 未找到数据源名称,也未指定默认驱动程序 我已经在windows中将数据库注册为ODBC源代码,但它不起作用。数据库的路径在Eclipse和jar中是相同的。也许是从jar中访问外部源的问题??有什么建议吗 protected static Connection getAccessConnection(String fullPath)

我有一个连接到mdb数据库文件的java程序。在Eclipse中,它工作得很好。现在我将程序导出为jar文件。当我现在启动程序并希望访问同一个文件时,我收到消息

未找到数据源名称,也未指定默认驱动程序

我已经在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;
  }

您似乎使用了不同版本的Java:64位在
.jar
模式下,32位在Eclipse模式下。您可以使用ProcessExplorer或其他类似工具对此进行检查。根据:

对于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
应用程序创建跟踪日志。比较两个跟踪。

为什么在使用odbc时需要db的路径?我使用的是Connection result=DriverManager.getConnection(url、用户名、密码);在java中连接到数据库,url=jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};DBQ=C:/xx/xx/Desktop/gfs tmp/DB5.mdbc您可以用这个简单的代码连接result=DriverManager.getConnection(“jdbc:odbc:,,,”);看看它是否有效,是的,谢谢,但它不能解决我的问题。该程序将在每台机器上运行,而不仅仅是在那些我注册了mdb文件并以dsn的名称访问它的机器上->因此我使用了jdbc:odbc:Driver={Microsoft Access Driver(.mdb)};DBQ=C:/xx/xx/Desktop/gfs tmp/DB5.MDB->Driver={Microsoft Access Driver(.MDB)应该在系统上可用,DBQ是指向我所选MDB文件的路径。->如前所述,它在Eclipse中工作正常,但在外部jar文件中工作不正常……您可以将db保存在根文件夹中,意思是C:或d: