2

DBCPBasicDataSourceを使用してOracleデータベースへの接続を確立しようとしています。

ここからダウンロードcommons-dbcp-1.4-bin.zipしました。

クラスパスには3つのjarファイルがあります。

  1. コモンズ-dbcp-1.4
  2. commons-dbcp-1.4-ソース
  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

説明

基本的にNoClassDefFoundErrorは、Javaの実行で、クラスパス上にない特定のクラスが必要であることが判明したことを意味します。これは、クラスが他のクラスを必要とするためです(通常はimportsで示されます)。あなたの場合(少なくとも)からのクラスの1つはcommons-dbcpへの依存関係を宣言しorg/apache/commons/pool/KeyedObjectPoolFactoryます。

クラスの名前は、/区切り文字として使用して指定されます。org/apache/commons/pool/KeyedObjectPoolFactoryそれが一般名(自分のクラスではない)の場合は、Googleでフルネーム(例)を入力するだけで、どこから取得できるかを見つけることができます。

于 2012-11-16T20:17:51.333 に答える