ClassNotFoundException oracle.jdbc.driver.OracleDriver only in servlet, using Eclipse

100,229

Solution 1

Probably you aren't deploying the oracle driver with your application.

You have several options:

  • You can place the driver jars in your WEB-INF/lib folder
  • You export it with your application. -> Right Click on Project -> Build Path-> Configure Build Path... -> Order and Export -> Check the drivers.
  • Place the driver jars in a shared or library extension folder of your application server. (You should go with option one or two though.)

Solution 2

You must include the ojdbc6.jar file in the Deployment Assembly of the Project...

  1. select the web project which contains the jsp file...

  2. select Project tab in the menu bar in Eclipse

  3. select properties in the drop down menu

  4. select Deployment Assembly

  5. Add your ojdbc6.jar file in it.

Share:
100,229
Geoff
Author by

Geoff

Updated on December 24, 2020

Comments

  • Geoff
    Geoff over 3 years

    The code below fails on the line:

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

    with the error:

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

    The two printlns print:

    Wed_Jun_22_11:18:51_PDT_2005
    false
    

    This makes me think the class exists and can be found. Also this exact same class works in an a non-servlet application.

    I have rebooted everything multiple times and regenerated the application/servlet multiple times. All values have been hard coded to make it simple and short.

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

    full servlet that fails:

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

    This application works:

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

    I'm using:

    • Eclipse JavaEE 1.4.2
    • Tomcat 7
    • jdk1.7
    • Oracle 11g R2
    • Windows 7 64bit