Java 64位JDBC-ODBC驱动程序问题

sca*_*ity 5 java sql-server excel odbc jdbc

我有一个程序,当使用32位JVM编译时工作正常,但如果我尝试使用64位JVM则会出现问题.我得到的信息是:"[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".

我正在尝试使用以下代码连接到Excel和SQL Server数据库:

String file = directory + "/fileName.xlsm";

String connectStr= "jdbc:odbc:DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ="  + file +  ";READONLY=false";

try {
    Class.forName(getDriver());
    gConnection = DriverManager.getConnection(connectStr);
    //do stuff with connection
}
Run Code Online (Sandbox Code Playgroud)

当我试图检查驱动程序管理器时,它似乎没有64位版本的驱动程序.任何方法可以轻松解决这个问题,并能够使用64位驱动程序进行连接,而无需手动更改计算机上的设置(因为此程序将分布在多台计算机上,我不希望必须单独为任何计算机下载驱动程序想要运行它)?此外,使用64位驱动程序连接是否更高效,或者32位驱动程序是否同样好/快(我确实有非常大的数据集,所以小差异会有所不同)?

Jos*_*non 1

64 位应用程序无法使用 32 位 ODBC 驱动程序,反之亦然,这就是您收到该错误消息的原因。您可以通过运行 32 位 (C:\Windows\SysWow64\odbcad32.exe) 和 64 位 (C:\Windows\System32\odbcad32.exe) ODBC 数据源管理器(“驱动程序”选项卡)来验证哪些 ODBC 驱动程序可用。分别 - 当然是在 64 位系统上。命名一开始很混乱。

我使用的一个应用程序也有类似的问题 - Access/Excel ODBC 驱动程序仅支持 32 位,这意味着当在 64 位中运行时,我们的应用程序无法处理打开 Excel 或 Access 数据库文件。我们最终改用Apache POI 库,这是一个可以直接读取/写入 Excel 和其他 Office 文档的 Java 库。您可能想考虑尝试一下,尽管切换需要做一些工作。

当时,Office 2010 尚未推出。我没有意识到他们在 Office 2010 中创建了 64 位 ODBC 驱动程序,现在必须看看这是否是合法的选项...即使是,我也不喜欢在 Java 应用程序中依赖 ODBC。