2

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

commons-dbcp-1.4-bin.zip这里下载。

类路径上有三个 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

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

4

1 回答 1

6

解决方案

您需要commons-pool在类路径上获取库 (JAR)。该事实被指示为项目依赖commons-pool项列表commons-dbcp中的依赖项

解释

基本上,NoClassDefFoundErrorJava 执行结果需要一个不在类路径上的特定类。这是因为类需要其他类(通常以imports 表示)。在您的情况下(至少)其中一个类commons-dbcp声明了对org/apache/commons/pool/KeyedObjectPoolFactory.

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

于 2012-11-16T20:17:51.333 回答