【问题标题】:IncompatibleClassChangeError when using UCanAccess / jackcess as a JDBC to MS Acess database使用 UCanAccess / jackcess 作为 JDBC 到 MS Acess 数据库时出现 IncompatibleClassChangeError
【发布时间】:2014-08-15 23:11:11
【问题描述】:

我正在尝试使用 UCanAccess 从 Mac OSX.8 中的 MS Access 数据库中读取数据。我相信我已经按照UCanAccess directionsGord Tompson in a StackOverflow answer 提供的设置了一切。这是我得到的错误:

线程“主”java.lang.IncompatibleClassChangeError 中的异常:找到 com.healthmarketscience.jackcess.Database 类,但需要接口

在 net.ucanaccess.jdbc.DBReference.(DBReference.java:149) 在 net.ucanaccess.jdbc.DBReferenceSingleton.loadReference(DBReferenceSingleton.java:57) 在 net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:100) 在 java.sql.DriverManager.getConnection(DriverManager.java:582) 在 java.sql.DriverManager.getConnection(DriverManager.java:207) 在 openACCDB.OpenACCDB.main(OpenACCDB.java:13)

我的构建路径包括以下内容:

commons-lang-2.6.jar commons-logging-1.1.1.jar hsqldb.jar jackcess-2.0.4.jar ucanaccess-2.0.8.jar 有人有建议吗?我的理解是 UCanAccess 和 Jackcess 是独立于平台的,但我还需要类似于 MS Jet Engine 的东西才能在 Mac OSX 中运行吗?

这是我的代码:

package openACCDB

import java.sql.*;
import java.io.File;

public class OpenACCDB {
    public static void main(String args[]) throws ClassNotFoundException, 
            SQLException {
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        String database = "/Users/george/Eclipse_Files/Java/GEOA_250/MyAccess.accdb";
        if ((new File(database)).exists()) {
            Connection conn = DriverManager.getConnection("jdbc:ucanaccess://"+database);
            Statement stmt = conn.createStatement();
            ResultSet rslt = stmt.executeQuery("SELECT [name] FROM [table1]");
            while (rslt.next())
                System.out.println(rslt.getString(1));
        }
        else System.out.println("The file "+database+"\n\tdoes not exist");
    }
}

【问题讨论】:

    标签: eclipse macos jdbc jackcess ucanaccess


    【解决方案1】:

    除了正确的版本之外,您的类路径 (jackcess1.x.x) 中似乎还有一个旧的、冲突的 jackcess 版本: com.healthmarketscience.jackcess.Database 是自 jackcess2.0.0 以来的接口。 你应该删除那个 jackcess1 jar。

    【讨论】:

    • jackcess 是 2.0.4,这是最新版本。 1.1.1 是公共日志记录。只是为了确保我会尝试用来自他们自己站点的 jackcess 替换 ucanaccess 附带的 jackcess 版本。但我不抱希望。
    • 是的,您不必替换正确的 jackcess jar (2.0.4),而是从类路径中删除错误的。你得到的异常不可能是其他原因,你的类路径中有另一个 jackcess 1.x.x jar 或者你的环境中有一些脏东西。
    • 我找到了旧的 jackcess (1.2.14.3),GDAL 框架正在使用它来安装我的 QGIS。我现在正试图弄清楚如何从 Eclipse 的 JRE 库中删除它。我似乎只能完全切换库,但我没有另一个可以与 ucanaccess 一起使用的库。你有什么进一步的建议吗?
    • 我能够通过创建一个新的 JRE 系统库从类路径中删除旧的 jackcess,但它仍然给出了同样的错误。我能够解决此问题的唯一方法是手动从其文件夹中删除旧文件。
    • 在你的构建路径中,你需要你提到的 jars 和一个干净的 JRE(你可以从官方来源下载)。也许 QGIS 安装部分不应该与其他类型的项目共享。
    猜你喜欢
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多