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

时间:2012-03-02 16:20:36

标签: java sql-server excel 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位驱动程序是否同样好/快(我确实有非常大的数据集,因此小的差异会有所不同)?

1 个答案:

答案 0 :(得分: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 library这是一个可以直接读/写Excel和其他Office文档的Java库。你可能想考虑尝试一下,虽然转换会涉及一些工作量。

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