2

我正在处理一个我一直在处理的应用程序出现的问题,该应用程序通过 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)时,它们都不会出现。

任何人都可以帮助阐明这一点吗?

4

2 回答 2

3

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

@echo off

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

谢谢您的帮助!

于 2010-09-29T17:23:27.117 回答
0

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

于 2013-08-10T02:27:29.657 回答