ClassNotFoundException oracle.jdbc.driver.OracleDriver только в сервлет, используя Eclipse
Код ниже не работает в строке:
Class.forName("oracle.jdbc.driver.OracleDriver");
с ошибкой:
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
Два println
print:
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();
}
}
}
Я использую:
- Eclipse JavaEE 1.4.2
- Tomcat 7
- jdk1.7
- Oracle 11g R2
- Windows 7 64bit
Ответы
Ответ 1
Возможно, вы не развертываете драйвер oracle с вашим приложением.
У вас есть несколько вариантов:
- Вы можете поместить контейнеры драйверов в папку
WEB-INF/lib
- Вы экспортируете его в свое приложение. → Щелкните правой кнопкой мыши по проекту →
Build Path
→ Configure Build Path...
→ Order and Export
→ Проверьте драйверы.
- Поместите драйверные банки в папку общего доступа или расширения библиотеки вашего сервера приложений. (Вы должны пойти с вариантом один или два, хотя.)
Ответ 2
Вы должны указать файл ojdbc6.jar в разделе развертывания проекта...
-
выберите веб-проект, содержащий файл jsp...
-
выберите вкладку Проект в строке меню в Eclipse
-
выберите свойства в выпадающем меню
-
выберите Развертывание сборки
-
Добавьте в него файл ojdbc6.jar.
Ответ 3
Попробуйте это, измените oracle.jdbc.driver.OracleTypes
на oracle.jdbc.OracleTypes