【问题标题】:How to use the ODBC 64 bit to read the excel file in Windows 7 64 bit machine如何使用 ODBC 64 位在 Windows 7 64 位机器中读取 excel 文件
【发布时间】:2015-04-29 10:30:35
【问题描述】:

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

我的系统默认有两个odbcad32

  1. [32 位] C:\Windows\SysWOW64\odbcad32 (它包含 microsoft excel 驱动程序
  2. [64-bit] C:\Windows\System32\odbcad32 (它没有 microsoft excel 驱动程序)

由于系统没有64位ODBC的Microsoft Excel Driver,我下载了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 驱动程序详细信息。如果是这样,我需要如何配置 ODBC 64 位驱动程序才能在程序中使用它。

【问题讨论】:

  • 让您的应用程序显示System.getProperty("java.version")edit 您的问题以及两台机器的结果(一台有效,另一台无效)。
  • @GordThompson 我已经用两台机器的结果编辑了这个问题。请通过它。

标签: excel jakarta-ee jdbc odbc


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢您回复 Gord。现在我已经在我的 Windows 7 64 位机器上安装了 Java 版本 7。当我运行代码时,它会显示 "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"
  • 我已授予注册表访问 ODBC 键的权限。
  • 您需要让您的应用显示 System.getProperty("sun.arch.data.model") 并验证 JVM 的“位数”与安装在该计算机上的 Access 数据库引擎版本的“位数”相同(均为 64 位或均为 32 位)。
  • 是的,安装在 64 位机器上的 JVM 和 Microsoft Access 数据库引擎只有 64 位。但是在 32 位机器上,我没有安装 Microsoft Access 数据库引擎本身。但是微软驱动程序仍然存在于 odbcad32.exe(32 位机器)中。是否需要 Microsoft Access 数据库引擎来安装 Microsoft Excel 驱动程序 (.xls) 还是需要其他东西?
  • 它现在可以工作了,我在代码中做了一点改动,这使得代码可以很好地工作。 c = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Excel 驱动程序 (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ= "path"; 如果我遗漏了一些东西或操作错误,只是转移了我的注意力。非常感谢您的努力,Gord..
【解决方案2】:

正如您所说,相同的代码在 32 位机器上运行良好,我猜您的应用程序也是 32 位的?

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

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

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

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

【讨论】:

  • 感谢您的回复。在这里,我有一些澄清。实际上我使用的是 64 位 Java 运行时以及 64 位 eclipse luna。但默认情况下,在我的 Windows 7 64 位机器中安装了 32 位 ODBC。然后我手动安装了 64 位 ODBC 驱动程序。正如您所提到的,它应该是 64 位系列或 32 位系列。但是当我运行代码时,安装了 64 位 ODBC 驱动程序时,它怎么会指向 32 位 ODBC 驱动程序。我是否需要在 eclipse 设置或系统设置中配置任何东西。
  • 我会首先检查应用程序是否从 withing eclipse 运行是否真的以 64 位运行。为此,我将使用 ProcessExplorer (technet.microsoft.com/de-ch/sysinternals/bb896653.aspx),从那里选择相应的 java-Process,然后右键单击 -> 属性,然后在选项卡的“图像”中检查“图像”的值。
  • 是的,我已经检查了 Eclipse 应用程序的 Image 值只有 64 位。
  • 另外,当我在 Eclipse 应用程序中运行程序时,会自动调用 ODBC 驱动程序。在进程资源管理器中,我无法确定 ODBC 32 位正在运行还是 ODBC 64 位正在运行。当我手动运行 32 位和 64 位的 ODBC 驱动程序时,在进程资源管理器中,两个驱动程序的图像值都是 n/a。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 2012-09-03
  • 2011-01-30
  • 2013-03-24
  • 1970-01-01
  • 2013-11-10
  • 2011-12-21
相关资源
最近更新 更多