如何使用ODBC 64位读取Windows 7 64位计算机中的Excel文件

时间:2015-04-29 10:30:35

标签: excel java-ee jdbc odbc

  

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

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

  1. [32位] C:\ Windows \ SysWOW64 \ odbcad32 (它包含microsoft excel驱动程序
  2. [64位] C:\ Windows \ System32 \ odbcad32(它没有 microsoft excel驱动程序
  3. 由于系统在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

    CODE

    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位驱动程序以在程序中使用它。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

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

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