ClassNotFoundException oracle.jdbc.driver.OracleDriver仅在servlet中使用Eclipse

Geo*_*off 8 java eclipse servlets classnotfoundexception

以下代码在线上失败:

Class.forName("oracle.jdbc.driver.OracleDriver");
Run Code Online (Sandbox Code Playgroud)

有错误:

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

两个println印刷品:

Wed_Jun_22_11:18:51_PDT_2005
false
Run Code Online (Sandbox Code Playgroud)

这让我觉得这个类存在并且可以找到.此完全相同的类也适用于非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");
}
Run Code Online (Sandbox Code Playgroud)

失败的完整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();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

此应用程序有效:

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();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我正在使用:

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

Udo*_*eld 12

可能您没有在应用程序中部署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可以工作,但是在下一行中找不到该类。谢谢 (2认同)

小智 9

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

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

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

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

  4. 选择部署程序集

  5. 在其中添加ojdbc6.jar文件.