2012-06-14 15 views
6

El código siguiente falla en la línea:ClassNotFoundException oracle.jdbc.driver.OracleDriver sólo en servlet, usando Eclipse

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

con el error:

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

Los dos println s de impresión:

Wed_Jun_22_11:18:51_PDT_2005 
false 

Esto me hace pensar que la clase existe y se puede encontrar. Además, esta misma clase funciona en una aplicación no servlet.

He reiniciado todo varias veces y he regenerado la aplicación/servlet varias veces. Todos los valores han sido codificados para hacerlo simple y corto.

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 completa que falla:

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

} 

funciona de esta aplicación:

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

} 

que estoy usando:

  • Eclipse 1.4.2 JavaEE
  • Tomcat 7
  • jdk1.7
  • Oracle 11g R2
  • Windows 7 de 64 bits
+2

¿Estas seguro que usted tiene su oráculo en xx.jar/WEB-INF de la aplicación web/lib o $ {} tomcat.install.dir/lib? Parece que falta el jar del controlador de oráculo en el classpath. –

Respuesta

11

Probablemente no va a implementar el controlador de Oracle con su solicitud.

tiene varias opciones:

  • se pueden colocar los frascos de controladores en la carpeta de WEB-INF/lib
  • exportarlo con su solicitud. -> Haga clic derecho en Proyecto ->Build Path ->Configure Build Path... ->Order and Export -> Compruebe los controladores.
  • Coloque los archivos de controlador en una carpeta de extensión compartida o de biblioteca de su servidor de aplicaciones. (Hay que ir con la opción de una o dos sin embargo.)
+1

¡La colocación del archivo ojdbc14.jar en la carpeta WEB-INF/lib solucionó el problema! Todavía no entiendo por qué funcionó el oracle.jdbc.driver.OracleDriver.BUILD_DATE, pero en la siguiente línea no se encontró la clase. Gracias – Geoff

+0

Creo que descubrí por qué funciona una llamada a OracleDriver y la otra no. La primera llamada se compila en la aplicación y ojdbc14.jar está en la ruta de compilación, por lo que funciona. La segunda llamada se realiza en tiempo de ejecución, por lo que debe estar en la ruta cuando se ejecuta java. – Geoff

0

probar esto, cambia el oracle.jdbc.driver.OracleTypes-oracle.jdbc.OracleTypes

5

Debe incluir el archivo ojdbc6.jar en el Asamblea despliegue del Proyecto ...

  1. seleccione el proyecto web que contiene el archivo jsp ...

  2. seleccione Proyecto pestaña en la barra de menú en Eclipse

  3. seleccione propiedades en el menú desplegable

  4. seleccione Asamblea despliegue

  5. Añadir su ojdbc6.jar archivo en ella.

Cuestiones relacionadas