【问题标题】:ClassNotFoundException oracle.jdbc.driver.OracleDriver only in servlet, using Eclipse [duplicate]ClassNotFoundException oracle.jdbc.driver.OracleDriver 仅在 servlet 中,使用 Eclipse [重复]
【发布时间】:2012-06-17 23:27:20
【问题描述】:

下面的代码失败就行了:

Class.forName("oracle.jdbc.driver.OracleDriver");

出现错误:

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

两个printlns 打印:

Wed_Jun_22_11:18:51_PDT_2005
false

这让我觉得这个类存在并且可以找到。同样,这个完全相同的类也适用于非 servlet 应用程序。

我已多次重新启动所有内容并多次重新生成应用程序/servlet。所有值都经过硬编码,使其简单而简短。

private static Connection getDBConnection() throws Exception {
    System.out.println(oracle.jdbc.driver.OracleDriver.BUILD_DATE);
    System.out.println(Class.class.desiredAssertionStatus());
    //load the driver
    Class.forName("oracle.jdbc.driver.OracleDriver");

    return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "SYSTEM", "pass");
}

完整的 servlet 失败:

package servletClass_3;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class OneMoreBookStore
 */
@WebServlet("/OneMoreBookStore")
public class OneMoreBookStore extends HttpServlet {

    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    private static Connection getDBConnection() throws Exception {

        System.out.println(oracle.jdbc.driver.OracleDriver.BUILD_DATE);
        System.out.println(Class.class.desiredAssertionStatus());

        //load the driver
        Class.forName("oracle.jdbc.driver.OracleDriver");
        return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "SYSTEM", "pass");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try
        {
            Connection con = getDBConnection();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

}

此应用程序有效:

package servletClass_3;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConnect {

    private static Connection getDBConnection() throws Exception {
        System.out.println(oracle.jdbc.driver.OracleDriver.BUILD_DATE);
        System.out.println(Class.class.desiredAssertionStatus());

        //load the driver
        Class.forName("oracle.jdbc.driver.OracleDriver");
        return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "SYSTEM", "pass");
    }
    public static void main(String[] args) {
        try
        {
            Connection con = getDBConnection();
            System.out.println("connection worked");
            con.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

}

我正在使用:

  • Eclipse JavaEE 1.4.2
  • 雄猫 7
  • jdk1.7
  • Oracle 11g R2
  • Windows 7 64 位

【问题讨论】:

  • 您确定在您的 Web 应用程序的 /WEB-INF/lib 目录或 ${tomcat.install.dir}/lib 目录中有您的 oracle-xx.jar 吗?似乎类路径中缺少 oracle 驱动程序 jar。

标签: java eclipse servlets classnotfoundexception


【解决方案1】:

您可能没有在您的应用程序中部署 oracle 驱动程序。

您有多种选择:

  • 您可以将驱动程序 jar 放在您的 WEB-INF/lib 文件夹中
  • 您将其与您的应用程序一起导出。 -> 右键单击​​项目 -> Build Path-> Configure Build Path... -> Order and Export -> 检查驱动程序。
  • 将驱动程序 jar 放在应用程序服务器的共享或库扩展文件夹中。 (不过,您应该选择一或二。)

【讨论】:

  • 将 ojdbc14.jar 文件放在 WEB-INF/lib 文件夹中解决了问题!我仍然不明白为什么 oracle.jdbc.driver.OracleDriver.BUILD_DATE 有效,但在下一行找不到该类。谢谢
  • 我想我明白了为什么一个调用 OracleDriver 有效而另一个无效。第一个调用被编译到应用程序中,并且 ojdbc14.jar 在构建路径中,所以它可以工作。第二次调用是在运行时进行的,所以它需要在 java 运行时的路径中。
【解决方案2】:

您必须在项目的部署程序集中包含 ojdbc6.jar 文件...

  1. 选择包含jsp文件的web项目...

  2. 在 Eclipse 的菜单栏中选择 Project 选项卡

  3. 在下拉菜单中选择属性

  4. 选择部署程序集

  5. 在其中添加您的 ojdbc6.jar 文件。

【讨论】:

    【解决方案3】:

    试试这个,把oracle.jdbc.driver.OracleTypes改成oracle.jdbc.OracleTypes

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      相关资源
      最近更新 更多