如何使用ODBC 64位读取Windows 7 64位机器上的excel文件

我需要通过我的Windows 7 64位机器中的ODBC 64位读取excel文件。

在我的系统默认情况下有两个odbcad32

  1. [32位] C:\ Windows \ SysWOW64 \ odbcad32( 它包含微软的Excel驱动程序
  2. [64位] C:\ Windows \ System32 \ odbcad32( 它没有Microsoft Excel驱动程序

因为系统在64位ODBC中没有Microsoft Excel驱动程序,所以我下载了AccessDatabaseEngine_x64并安装了它。

下安装成功后

[64位] C:\ Windows \ System32 \ odbcad32存在Microsoft Excel驱动程序

现在当我通过eclipse运行java程序。 显示错误消息

找不到适合jdbc的驱动程序:odbc:Driver = {Microsoft Access Driver(* .mdb,* .accdb)}; DBQ = C:/Users/ashokkumarg/Desktop/Excel/TestCaseData.xls

但是相同的代码在Windows 32位机器上工作得非常好。 我不知道可能是什么原因。

Java版本

Windows 7 32位机器(代码工作) 1.7.0_51

Windows 7 64位机器(代码失败) 1.8.0_31

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ConnectionTest { public static void main(String[] args) throws SQLException { Connection c = null; Statement stmnt = null; System.out.println("Test case is started Running"); try{ c = DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/ashokkumarg/Desktop/Excel/TestCaseData.xls"); stmnt = c.createStatement(); String query = "select * from [TestCase$];"; ResultSet rs = stmnt.executeQuery( query ); while( rs.next() ) { System.out.println( rs.getString( "Page" )); } } catch(Exception e){ e.printStackTrace(); } } } 

我在这里有几个问题:

  1. 当有两个odbcad32存在时,如何在Windows 7 64位机器上使用ODBC 64位读取excel文件。

  2. 运行程序时,是否需要使用32位odbcad32驱动程序的详细信息。 如果是这样,我怎么需要configurationODBC 64位驱动程序在程序中使用它。

如果System.getProperty("java.version")返回“1.8.xxxx”,那么该机器正在运行Java 8,而JDBC-ODBC Bridge不可用,因为它已从Java 8中删除。

如果您希望您的应用程序使用ODBC,那么您将必须确保您的用户正在运行Java 7或更早版本。 如果不直接pipe理他们的机器,这可能很困难,因为Java运行时(JRE)的自动更新function现在分发了Java 8。

如果您希望您的应用程序能够在Java 8下运行,那么您将不得不使用其他方式来访问Excel数据。 Apache POI将是一种可能性。

正如你所说,相同的代码在32位机器上工作正常,我猜你的应用程序也是32位?

注:驱动程序的位数不取决于操作系统,而取决于试图使用该驱动程序的应用程序。

所以:如果您有一个32位应用程序,则需要使用32位ODBCpipe理工具来configuration一个DSN条目,并且您需要相应的32位ODBC驱动程序。

如果您的应用程序是64位,则需要使用64位版本的pipe理工具以及64位驱动程序。

因此,如果您的Java运行时是32位运行时,则需要始终使用32位版本的驱动程序。 如果您使用64位Java运行时,则需要使用64位版本的驱动程序。