【问题标题】:Access a .xlsb file in java在 java 中访问 .xlsb 文件
【发布时间】:2015-11-20 14:04:53
【问题描述】:

我有以下 JDBC 代码。我正在尝试创建一个dnsless 连接。

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
public class dummy {
    public static void main(String[] argv) {
        System.out.println("-------- Oracle JDBC Connection Testing ------");
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch (ClassNotFoundException e) {
            System.out.println("Where is your Oracle JDBC Driver?");
            e.printStackTrace();
            return;
        }
        System.out.println("Oracle JDBC Driver Registered!");
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(
                    "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=D:/abc.xls;");
        } catch (SQLException e) {
            System.out.println("Connection Failed! Check output console");
            e.printStackTrace();
            return;
        }
        if (connection != null) {
            System.out.println("You made it, take control your database now!");
        } else {
            System.out.println("Failed to make connection!");
        }
    }

}

这个程序在下面的输出中运行良好。

-------- Oracle JDBC Connection Testing ------
Oracle JDBC Driver Registered!
You made it, take control your database now!

但我需要访问一个.xlsb 文件,并且当我更改时

connection = DriverManager
                    .getConnection("jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=D:/abc.xls;");

到

connection = DriverManager
                    .getConnection("jdbc:odbc:Driver={Microsoft Excel Driver (*.xlsb)};DBQ=D:/abc.xlsb;");

我得到以下异常输出。

-------- Oracle JDBC Connection Testing ------
Oracle JDBC Driver Registered!
Connection Failed! Check output console
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at dummy.main(dummy.java:19)

请告诉我如何解决这个问题,我想使用dnsless connection。因为我有多个 Excel 表格要处理。

而且我所有的应用都是 32 位的。

谢谢

【问题讨论】:

  • 您可以尝试安装Access Database Engine,然后看看是否可以使用Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}。 (请注意,您必须安装与运行 Java 应用程序的 JVM 相同“位数”的驱动程序:32 位或 64 位。)
  • 嗨@GordThompson,感谢您戳戳这些bitness,在写问题时错过了,我所有的应用程序都是32位的。更新了我的问题:)
  • @GordThompson,只是想知道,这个 Access 数据库引擎是什么,我在部署我的应用程序时需要它吗?我也可以用这个减少 DNS 连接吗?
  • Access 数据库引擎包括用于处理 Office 应用程序中的数据的组件和驱动程序,包括 Access 数据库、Excel 文档以及一些其他格式(文本和 dBASE 文件)。如果您的应用程序使用它,那么它需要安装在部署您的应用程序的任何机器上。是的,它可以用于无 DSN 连接。
  • ...还请记住,JDBC-ODBC 桥已从 Java 8 中删除,因此您的部署策略必须确保您的应用程序在 Java 7(或更早版本)JVM 下运行。

标签: java excel jdbc odbc


【解决方案1】:

顾名思义,旧版 Excel ODBC 驱动程序

Driver={Microsoft Excel Driver (*.xls)};

仅适用于 .xls 文件。

较新的 Excel ODBC 驱动程序

Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};

也适用于最新版本的 Excel(2007 及更高版本)使用的 Open XML file types。较新的 Excel 驱动程序包含在 Access Database Engine 安装中。

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多