javax.servlet.ServletException : java. lang.NoClassDefFoundError:org/apache/commons/pool/KeyedObjectPoolFactory

标签 java oracle10g database-connection apache-commons-dbcp

我正在尝试使用 BasicDataSource 建立与 Oracle 数据库的连接使用 DBCP .

我下载了commons-dbcp-1.4-bin.zip来自 here .

classpath下有3个jar文件。

  1. commons-dbcp-1.4
  2. commons-dbcp-1.4-sources
  3. commons-dbcp-1.4-javadoc

我正在使用以下代码来建立连接。

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;

public class DatabaseConnection {

    private final static BasicDataSource BASIC_DATA_SOURCE = new BasicDataSource();
    private final static String SQL = "SELECT * FROM admin WHERE login_id=? AND admin_pwd=?";

    static {
        BASIC_DATA_SOURCE.setDriverClassName("oracle.jdbc.OracleDriver");
        BASIC_DATA_SOURCE.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
        BASIC_DATA_SOURCE.setUsername("wagafashiondb");
        BASIC_DATA_SOURCE.setPassword("root");
    }

    private static Connection getConnection() throws SQLException {
        return BASIC_DATA_SOURCE.getConnection();
    }

    public boolean exists(String userName, String password) throws SQLException {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        boolean exists = false;

        try {
            connection = getConnection();
            ps = connection.prepareStatement(SQL);
            ps.setString(1, userName);
            ps.setString(2, password);
            rs = ps.executeQuery();
            exists = rs.next();
        } finally {
            try {
                if (connection != null) {connection.close();}
                if (ps != null) {ps.close();}
                if (rs != null) {rs.close();}
            } catch (SQLException e) {

            }
        }
        return exists;
    }
}

它抛出以下异常,

javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory

这似乎暗示我使用了错误的来源。可能是什么原因导致这个异常?

最佳答案

解决方案

您需要在类路径中获取 commons-pool 库 (JAR)。 事实上,在 project's dependecies list 中,commons-poolcommons-dbcp 的依赖项。

解释

基本上 NoClassDefFoundError 意味着 Java 执行结果需要一个不在类路径上的特定类。这是因为类需要其他类(通常在 import 中指示)。在您的情况下(至少)commons-dbcp 中的一个类声明了对 org/apache/commons/pool/KeyedObjectPoolFactory 的依赖。

类的名称使用/ 作为分隔符。如果这是一个通用名称(不是您自己的类),您可以尝试通过在 Google 中键入全名(例如 org/apache/commons/pool/KeyedObjectPoolFactory)来查找从哪里获取它。

关于javax.servlet.ServletException : java. lang.NoClassDefFoundError:org/apache/commons/pool/KeyedObjectPoolFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13423491/

相关文章:

java - 无法加载库 'libtesseract302' : The specified module could not be found

sql - Oracle SQL - 仅当某个条件为真时才可以连接两个表吗?

Oracle:10g oracle 客户端是否可以与 11g 服务器一起使用?

c++ - 如何使用 CPP 在 win7 64 位操作系统中打开 MSAcess 数据库?

python - 整个 python 应用程序中的单个数据库连接(遵循单例模式)

java - 电池没电时会调用哪些 Android 方法?

java - 项目文件管理

java - If 条件的另一种书写方式

oracle - 我们可以在 PL/SQL 中的函数内部调用过程吗?

java - Jetty 7 + MySQL 配置 [java.lang.IllegalArgumentException : Object is not of type class org. eclipse.jett y.webapp.WebAppContext]