使用JDBC-ODBC,无DSN连接字符串和64位Windows 7时遇到麻烦

时间:2010-09-27 23:30:46

标签: odbc windows-7-x64 dsn jdbc-odbc

我正在处理一个问题,该问题出现在我一直在使用的应用程序上,该应用程序通过JDBC-ODBC连接到Access文件。在其他Windows平台上,没有遇到此问题,但在Windows 7 64位盒上,尝试连接无DSN连接字符串返回:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

尝试了字符串的多个变体,但它们都返回了相同的错误。以下是它目前尝试连接的方式:

  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  StringBuffer databaseConnectionString;

  if (SystemUtils.IS_OS_WINDOWS_7) {
       databaseConnectionString = new StringBuffer("jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=");
       databaseConnectionString.append(databaseFile);

  } else {
       databaseConnectionString = new StringBuffer("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=");
       databaseConnectionString.append(databaseFile);
       databaseConnectionString.append(";DriverID=22;READONLY=false}");
  }

检查32位ODBC数据源管理中的驱动程序确认驱动程序存在。但是,当使用regedt32.exe检查ODBC驱动程序(HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI/ODBC Drivers)时,它们都不会出现。

任何人都可以帮忙解释一下吗?

2 个答案:

答案 0 :(得分:3)

我发现问题是我在64位Java中运行程序。虽然我还没有成功检测程序是否在32位或64位Java中运行,但我已经通过安装32位Java运行时环境并使用如下所示的.bat文件解决了该解决方案:

@echo off

"C:\Program Files (x86)\Java\jre6\bin\java" -D32 -Xmx1024m -jar programName.jar

感谢您的帮助!

答案 1 :(得分:0)

鉴于JAVA或MS的ODBC驱动程序缺少有意义的错误消息,这是一项艰巨的挑战。上面关于选择32位Java和MS Access驱动程序(使用MS的AccessDatabaseEngine.exe)的答案确实有效,但与使用64位Java相比,在处理其他操作方面花费了大量的代价(约30%)。我不愿支付这个价格所以我安装了64位Java(与32位一起安装在一个单独的目录c:\ Java \ 32或64中)。后面这个目录问题对我来说非常重要,因为我使用的是Apache Geronimo,如果在Program Files(x86)中安装了Java,它将无法启动......因为(x86)似乎会终止其批处理文件解析。然后我卸载了32位MS Access并安装了64位MS Access(AccessDatabaseEngine_x64.exe)。最后,它适用于更高速度和MDB连接。