我正在处理一个问题,该问题出现在我一直在使用的应用程序上,该应用程序通过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)
时,它们都不会出现。
任何人都可以帮忙解释一下吗?
答案 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连接。