2012-06-14 32 views
6

Đoạn code dưới đây không thành công trên dòng:ClassNotFoundException oracle.jdbc.driver.OracleDriver chỉ trong servlet, sử dụng Eclipse

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

với lỗi:

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

Hai println s in:

Wed_Jun_22_11:18:51_PDT_2005 
false 

Điều này khiến tôi nghĩ rằng lớp học tồn tại và có thể được tìm thấy. Lớp chính xác này cũng hoạt động trong một ứng dụng không phải là servlet.

Tôi đã khởi động lại mọi thứ nhiều lần và tạo lại ứng dụng/servlet nhiều lần. Tất cả các giá trị đã được mã hóa cứng để làm cho nó đơn giản và ngắn gọn.

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 đầy đủ mà không:

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

} 

Ứng dụng này hoạt động:

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

} 

Tôi đang sử dụng:

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

Bạn có chắc là bạn có oracle-xx.jar trong thư mục/WEB-INF/lib của ứng dụng web của bạn hoặc thư mục $ {tomcat.install.dir}/lib không? Có vẻ như cái hộp điều khiển oracle bị thiếu trong classpath. –

Trả lời

11

Có lẽ bạn đang không triển khai các tài xế oracle với ứng dụng của bạn.

Bạn có một vài lựa chọn:

  • Bạn có thể đặt lọ lái xe trong thư mục WEB-INF/lib bạn
  • Bạn xuất nó với ứng dụng của bạn. -> Nhấp chuột phải vào Dự án ->Build Path ->Configure Build Path... ->Order and Export -> Kiểm tra trình điều khiển.
  • Đặt các lọ trình điều khiển trong thư mục tiện ích mở rộng hoặc thư viện được chia sẻ của máy chủ ứng dụng của bạn. (Bạn nên đi với lựa chọn một hoặc hai mặc dù.)
+1

Đặt tệp ojdbc14.jar trong thư mục WEB-INF/lib đã khắc phục sự cố! Tôi vẫn không hiểu tại sao oracle.jdbc.driver.OracleDriver.BUILD_DATE hoạt động, nhưng trên dòng tiếp theo, lớp học không được tìm thấy. Cảm ơn – Geoff

+0

Tôi nghĩ rằng tôi đã tìm ra lý do tại sao một cuộc gọi đến các công trình OracleDriver và người kia thì không. Cuộc gọi đầu tiên được biên dịch vào ứng dụng và ojdbc14.jar nằm trong đường dẫn xây dựng, vì vậy nó hoạt động. Cuộc gọi thứ hai được thực hiện tại thời gian chạy nên nó cần phải nằm trong đường dẫn khi java chạy. – Geoff

0

Hãy thử điều này, thay đổi oracle.jdbc.driver.OracleTypes-oracle.jdbc.OracleTypes

5

Bạn phải bao gồm các tập tin ojdbc6.jar trong Triển khai hội của dự án ...

  1. chọn dự án web có chứa tệp jsp ...

  2. chọn Dự án tab trên thanh menu trong Eclipse

  3. chọn tính trong trình đơn thả xuống

  4. chọn Triển khai hội

  5. Thêm ojdbc6.jar của bạn trong đó.

Các vấn đề liên quan