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 } 

当我试图检查驱动程序pipe理器,它似乎没有64位版本的驱动程序。 任何方式来解决这个很容易,并能够连接使用64位驱动程序,而无需手动更改计算机上的设置(因为此程序将分布在多台计算机,我不想单独下载驱动程序的计算机想要运行它)? 另外,使用64位驱动程序连接还是32位连接的效率更高一些(我的数据集非常大,所以差异很小)。

64位应用程序不能使用32位ODBC驱动程序,反之亦然,这就是为什么您会收到该错误消息。 您可以通过运行32位(C:\ Windows \ SysWow64 \ odbcad32.exe)和64位(C:\ Windows \ System32 \ odbcad32.exe)ODBC数据源pipe理员(“驱动程序”选项卡)来validation可用的ODBC驱动程序。分别在64位系统当然。 首先命名是混乱的。

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

那时候,Office 2010还没有出来。 我没有意识到他们在Office 2010中创build了一个64位的ODBC驱动程序,并且现在将不得不看看这是否是一个合法的选项…即使是我不喜欢在Java应用程序中依赖ODBC。