Jackcess “NoClassDefFoundError” exception

匿名 (未验证) 提交于 2019-12-03 01:58:03

问题:

I am using jackcess for the conncetivity to my access database. But I am following exception

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.(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

I have used jdbc but it is not working either. How can solve my problem?

回答1:

Jackcess has a dependency on Jakarta Commons Lang. You need to make sure that the commons lang and the other dependencies are on your classpath.



回答2:

Here's how I got Jackcess working, starting with a fresh install of NetBeans 7.4 on Windows 8:

I downloaded the latest Jackcess JAR file via the "Looking for the latest version?" link on files page. I saved it in the folder

C:\Users\Public\Java\

As listed on the Project Dependencies page for Jackcess, I downloaded the ZIPped binaries for the two required dependencies: commons-lang v2.x, and commons-logging v1.x. I unpacked the ZIP files into the above folder, so it now contained two sub-folders

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

I launched NetBeans and created a new Project (for a Java Application) named "myJackcessTest". I expanded the Project in the tree view, right-clicked "Libraries", chose "Add JAR/Folder...", and added the three JAR files:

Once that was done, I created my little test app...

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();         }     } }

...and when I hit F6 it ran fine:

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!