【问题标题】:Jackcess "NoClassDefFoundError" exceptionJackcess“NoClassDefFoundError”异常
【发布时间】:2013-10-27 08:40:58
【问题描述】:

我正在使用 jackcess 连接我的访问数据库。但我正在关注异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder
    at com.healthmarketscience.jackcess.impl.RowIdImpl.compareTo(RowIdImpl.java:113)
    at com.healthmarketscience.jackcess.impl.IndexData$Entry.compareTo(IndexData.java:1838)
    at com.healthmarketscience.jackcess.impl.IndexData$Entry.compareTo(IndexData.java:1646)
    at java.util.Collections.indexedBinarySearch(Collections.java:273)
    at java.util.Collections.binarySearch(Collections.java:259)
    at com.healthmarketscience.jackcess.impl.IndexData$DataPage.findEntry(IndexData.java:2368)
    at com.healthmarketscience.jackcess.impl.IndexData.findEntryPosition(IndexData.java:722)
    at com.healthmarketscience.jackcess.impl.IndexData.access$3300(IndexData.java:56)
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.updatePosition(IndexData.java:2133)
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.restorePosition(IndexData.java:2072)
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.restorePosition(IndexData.java:2055)
    at com.healthmarketscience.jackcess.impl.IndexData$EntryCursor.beforeEntry(IndexData.java:2017)
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findPotentialRow(IndexCursorImpl.java:368)
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntryImpl(IndexCursorImpl.java:262)
    at com.healthmarketscience.jackcess.impl.IndexCursorImpl.findFirstRowByEntry(IndexCursorImpl.java:135)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl$DefaultTableFinder.findRow(DatabaseImpl.java:1890)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl$TableFinder.findObjectId(DatabaseImpl.java:1799)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.readSystemCatalog(DatabaseImpl.java:804)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.<init>(DatabaseImpl.java:513)
    at com.healthmarketscience.jackcess.impl.DatabaseImpl.open(DatabaseImpl.java:386)
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:170)
    at com.healthmarketscience.jackcess.DatabaseBuilder.open(DatabaseBuilder.java:193)
    at ass.Access.main(Access.java:25)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.builder.CompareToBuilder
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 23 more

我使用过 jdbc,但它也不起作用。如何解决我的问题?

【问题讨论】:

    标签: java ms-access netbeans-7 jackcess


    【解决方案1】:

    以下是我如何让 Jackcess 工作,从在 Windows 8 上全新安装 NetBeans 7.4 开始:

    我通过“寻找最新版本?”下载了最新的 Jackcess JAR 文件。 files 页面上的链接。我保存在文件夹中

    C:\Users\Public\Java\

    正如 Jackcess 的 Project Dependencies 页面上列出的那样,我下载了两个必需依赖项的压缩二进制文件:commons-lang v2.x 和 commons-logging v1.x。我将 ZIP 文件解压到上面的文件夹中,所以它现在包含两个子文件夹

    C:\Users\Public\Java\commons-lang-2.6\
    C:\Users\Public\Java\commons-logging-1.1.3\

    我启动了 NetBeans 并创建了一个名为“myJackcessTest”的新项目(用于 Java 应用程序)。我在树形视图中展开 Project,右键单击“Libraries”,选择“Add JAR/Folder...”,并添加了三个 JAR 文件:

    完成后,我创建了我的小测试应用程序...

    package myjackcesstest;
    
    import com.healthmarketscience.jackcess.*;
    import java.io.File;
    import java.io.IOException;
    
    public class MyJackcessTest {
    
        public static void main(String[] args) {
            try {
                Table table = DatabaseBuilder.open(new File("C:\\Users\\Public\\Database1.accdb")).getTable("Clients");
                System.out.println(String.format("table contains %d row(s)", table.getRowCount()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    ...当我按下 F6 时,它运行良好:

    run:
    table contains 1 row(s)
    BUILD SUCCESSFUL (total time: 0 seconds)
    

    【讨论】:

      【解决方案2】:

      Jackcess 在Jakarta Commons Lang 上有一个dependency。您需要确保 commons lang 和其他依赖项在您的类路径中。

      【讨论】:

      • Di Macro 我已经添加了commons logging、commons codec、poi、junit、log4j。它不工作。我错过了什么?
      • 我已添加文件 commons lang 但现在我收到此警告 log4j:WARN No appenders could be found for logger (com.healthmarketscience.jackcess.impl.DatabaseImpl)。 log4j:WARN 请正确初始化 log4j 系统。我能做什么?
      • 查看stackoverflow.com/questions/11318806/… 以消除该错误。
      猜你喜欢
      • 2017-11-24
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多