Jackcess“ NoClassDefFoundError”异常

4

我正在使用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,但它也没有起作用。我该怎么解决我的问题?

2个回答

6

以下是我是如何在Windows 8上使用NetBeans 7.4来安装Jackcess:

首先,我通过“Looking for the latest version?”链接从files页面下载了最新的Jackcess JAR文件,并将其保存在文件夹中:

C:\Users\Public\Java\

根据Jackcess的Project Dependencies 页面所列出的依赖关系,我下载了两个必需的依赖项的ZIP二进制文件: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应用程序)。 我展开树视图中的项目,在“Libraries”上右键单击,选择“Add JAR/Folder...”,然后添加了这三个JAR文件:

Libraries.png

完成上述步骤后,我创建了一个简单的测试应用程序……

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)

3

我已经添加了commons logging、commons codec、poi、junit和log4j,但它们似乎无法正常工作。我漏掉了什么? - Sarah
1
commons lang,2.0版本可从http://repo1.maven.org/maven2/commons-lang/commons-lang/2.0/commons-lang-2.0.jar下载。 - Rob Di Marco
我已经添加了commons lang文件,但现在我收到了这个警告log4j:WARN No appenders could be found for logger (com.healthmarketscience.jackcess.impl.DatabaseImpl)。 log4j:WARN Please initialize the log4j system properly. 我该怎么做? - Sarah
查看https://dev59.com/FWgu5IYBdhLWcg3wdGsb,以消除该错误。 - Rob Di Marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接