UCanAccess的ClassNotFoundException和NoClassDefFound错误

时间:2014-05-23 20:20:38

标签: java ms-access jdbc ucanaccess

Java 8中不再包含JDBC-ODBC Bridge,因此我尝试了UCanAccess,但我遇到了麻烦。这是我的代码:

  package jdbc;
  import java.sql.*;

 public class jdbc  
 {
    Connection con;
    Statement st;

    jdbc()
    {  
        try
        {
            con=DriverManager.getConnection("jdbc:ucanaccess://P:/eclipseWorkspace/databases/signup.accdb");
        st=con.createStatement();

        st.executeUpdate("INSERT INTO signup (firstName,lastName,email,password)     VALUES ('rocky','balboa','rocky@gmail.com','pop')");
        System.out.println("SUCCESS");

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    }


}

class main
{
     public static void main(String args[])
    {
        new jdbc();
    }
}

我已经包含了一些外部罐子,如图所示:

http://i.imgur.com/ujhPP0l.png?1

当我运行它时,它给出了一个包含ClassNotFoundException和NoClassDefFound错误的堆栈跟踪,如下所示:

http://i.imgur.com/UACP77k.png?1

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

UCanAccess有几个依赖项,其中一个是commons-lang-2.x(2.4或更新版本)。您在项目中使用commons-lang3-3.3.2,因此UCanAccess(实际上是Jackcess)找不到commons-lang-2.x类。

当您解压缩UCanAccess分发时,它创建了一个lib/文件夹,其中包含所需依赖项的兼容版本。您需要使用UCanAccess commons-lang3-3.3.2.jar文件夹中的commons-lang-2.6.jar替换项目中的lib/引用。