web-dev-qa-db-fra.com

ClassNotFoundException Oracle.jdbc.driver.OracleDriver uniquement dans le servlet, à l'aide d'Eclipse

Le code ci-dessous échoue sur la ligne:

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

avec l'erreur: 

Java.lang.ClassNotFoundException: Oracle.jdbc.driver.OracleDriver

Les deux printlns impriment:

Wed_Jun_22_11:18:51_PDT_2005
false

Cela me fait penser que la classe existe et peut être trouvée. De plus, cette même classe exacte fonctionne dans une application non-servlet.

J'ai tout redémarré plusieurs fois et régénéré plusieurs fois l'application/le servlet. Toutes les valeurs ont été codées en dur pour le rendre simple et court. 

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 complet qui échoue:

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

}

Cette application fonctionne:

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

}

J'utilise:

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

Probablement vous ne déployez pas le pilote Oracle avec votre application.

Vous avez plusieurs options:

  • Vous pouvez placer les fichiers JAR du pilote dans votre dossier WEB-INF/lib.
  • Vous exportez avec votre application. -> Clic droit sur Projet -> Build Path-> Configure Build Path... -> Order and Export -> Vérifier les pilotes.
  • Placez les fichiers jar du pilote dans un dossier d'extension partagé ou de bibliothèque de votre serveur d'applications. (Vous devriez cependant choisir l'option un ou deux.)
11
Udo Held

Vous devez inclure le fichier ojdbc6.jar dans le Assemblée de déploiement du projet ...

  1. sélectionnez le projet Web qui contient le fichier jsp ...

  2. sélectionnez Projet onglet dans la barre de menus dans Eclipse

  3. sélectionnez propriétés dans le menu déroulant

  4. select Deployment Assembly

  5. Ajoutez-y votre fichier ojdbc6.jar.

7
sri

Essayez ceci, changez le Oracle.jdbc.driver.OracleTypes en Oracle.jdbc.OracleTypes

0
user1250206