2012-06-14 37 views
6

नीचे कोड लाइन पर विफल रहता है का उपयोग करते हुए:ClassNotFoundException oracle.jdbc.driver.OracleDriver केवल सर्वलेट में, ग्रहण

Class.forName("oracle.jdbc.driver.OracleDriver"); 
त्रुटि के साथ

:

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

दो println रों प्रिंट:

Wed_Jun_22_11:18:51_PDT_2005 
false 

इससे मुझे लगता है कि कक्षा मौजूद है और पाया जा सकता है। यह भी एक ही कक्षा एक गैर-सर्वलेट अनुप्रयोग में काम करती है।

मैंने कई बार रीबूट किया है और एप्लिकेशन/सर्वलेट को कई बार पुन: उत्पन्न किया है। सभी मूल्यों को इसे सरल और छोटा बनाने के लिए कठिन कोड किया गया है।

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

पूर्ण सर्वलेट कि विफल रहता है:

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

} 

यह आवेदन काम करता है:

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

} 

मैं उपयोग कर रहा हूँ:

  • ग्रहण JavaEE 1.4.2
  • बिलाव 7
  • jdk1.7
  • ओरेकल 11g R2
  • विंडोज 7 64 बिट
+2

क्या आप सुनिश्चित हैं कि आपके पास अपने वेब एप्लिकेशन/WEB-INF/lib निर्देशिका या $ {tomcat.install.dir}/lib निर्देशिका में आपका ऑरैक-xx.jar है? ऐसा लगता है कि क्लासपाथ से ओरेकल ड्राइवर जार गायब है। –

उत्तर

11

शायद आप अपने आवेदन के साथ ओरेकल चालक की तैनाती नहीं कर रहे हैं।

  • आप अपने WEB-INF/lib फ़ोल्डर में चालक जार जगह कर सकते हैं
  • आप अपने आवेदन के साथ इसे निर्यात:

    आप कई विकल्प हैं। -> परियोजना पर राइट क्लिक करें ->Build Path ->Configure Build Path... ->Order and Export -> ड्राइवरों की जांच करें।

  • अपने एप्लिकेशन सर्वर के साझा या लाइब्रेरी एक्सटेंशन फ़ोल्डर में ड्राइवर जार रखें। (आप हालांकि विकल्प एक या दो के साथ जाना चाहिए।)
+1

वेब-आईएनएफ/lib फ़ोल्डर में ojdbc14.jar फ़ाइल को रखने से समस्या ठीक हो गई है! मुझे अभी भी समझ में नहीं आता क्यों oracle.jdbc.driver.OracleDriver.BUILD_DATE ने काम किया, लेकिन अगली पंक्ति पर कक्षा नहीं मिली। धन्यवाद – Geoff

+0

मुझे लगता है कि मुझे पता चला कि ओरेकलड्राइवर के लिए एक कॉल क्यों काम करता है और दूसरा नहीं। पहला कॉल एप्लिकेशन में संकलित किया गया है और ojdbc14.jar बिल्ड पथ में है, इसलिए यह काम करता है। दूसरा कॉल रन टाइम पर किया जाता है, इसलिए जब जावा चलता है तो उसे पथ में होना चाहिए। – Geoff

0

इस प्रयास करें, बदलने oracle.jdbc.driver.OracleTypesoracle.jdbc.OracleTypes को

5

आप परियोजना के तैनाती विधानसभा में ojdbc6.jar फ़ाइल को शामिल करना चाहिए ...

  1. वेब प्रोजेक्ट का चयन करें जिसमें jsp फ़ाइल है ...

  2. ग्रहण

  3. में चयन मेनू बार में परियोजना टैब ड्रॉप डाउन मेनू में चयन गुण

  4. चयन तैनाती विधानसभा

  5. अपने ojdbc6.jar जोड़े इसमें फाइल करें।