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



我有一个程序,当使用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
}

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

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

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

当时,Office2010还没有问世。我没有意识到他们在Office2010中创建了一个64位ODBC驱动程序,现在必须看看这是否是一个合法的选择。。。即使是这样,我也不喜欢在Java应用程序中依赖ODBC。

最新更新