Пробовал все, но не смог решить проблему. Я использую корпоративную версию Windows 8 (если это имеет какое-то отношение к проблеме)
У меня есть оракул, установленный в d: и tomcat server на c :. Я скопировал файл jar ojdbc6.jar из каталога oracle lib в каталог tomcat lib. Затем я создал путь к классам в переменных окружения (системная переменная) со значением как "C:\Program Files\Apache Software Foundation\Tomcat 8.0\lib\ojdbc6.jar"
.
моя программа в блокноте (файл.jsp) выглядит следующим образом:
<%@ page import="java.sql.*" %>
<html>
<body>
<%
Connection conn;
Statement st; ResultSet rs;
new oracle.jdbc.OracleDriver();
String dbURL="jdbc:odbc:oracle:thin:@localhost:1521:XE";
String userId="system";
String pwd="moon";
conn=DriverManager.getConnection(dbURL,userId,pwd);
st=conn.createStatement();
rs= st.executeQuery("SELECT * FROM login");
while(rs.next())
{
System.out.println(rs.getString(1)+""+rs.getString(2));
}
%>
</body>
</html>
Я проверил, что все мои службы работают для oracle, а также для сервера tomcat. ''
РЕДАКТИРОВАТЬ
Согласно комментариям Chanda, ошибка такова:
HTTP-статус 500 - Исключение произошло при обработке строки JSP/page2.jsp в строке 14. Строка 14 - conn = DriverManager.getConnection(dbURL, userId, pwd)
java.lang.ClassNotFoundException: org.apache.jsp.new_jsp Сервер обнаружил внутреннюю ошибку, которая помешала ему выполнить этот запрос.
Я бы не рекомендовал вам это делать. Код сценария и вызовы базы данных не принадлежат JSP. Это гораздо более продолжительное обсуждение.
Но непосредственной проблемой является неправильный URL вашего соединения:
String dbURL="jdbc:odbc:oracle:thin:@localhost:1521:XE";
должно быть
String dbURL="jdbc:oracle:thin:@localhost:1521:XE"
Tomcat будет игнорировать все переменные системной среды. Я бы рекомендовал, чтобы у вас никогда не было CLASSPATH.
Правильная вещь - положить ojdbc6.jar в папку Tomcat server/lib.
Добавьте другие сторонние JAR в WEB-INF/lib вашего веб-приложения.
Connection conn;
Statement st;
ResultSet rs;
String dbURL="jdbc:odbc:oracle:thin:@localhost:1521:XE";
String userId="system";
String pwd="moon";
try {
Class.forName("oracle.jdbc.OracleDriver");
conn=DriverManager.getConnection(dbURL,userId,pwd);
st=conn.createStatement();
rs= st.executeQuery("SELECT * FROM login");
while(rs.next()) {
System.out.println(rs.getString(1)+" "+rs.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DatabaseUtils.close(rs); // implement static methods to do this.
DatabaseUtils.close(st);
DatabaseUtils.close(conn);
}
Я бы рекомендовал что-то вроде этого:
public class DatabaseUtils {
public static void close(Connection c) {
try {
if (c != null) {
c.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// I'll leave the others for you.
}
Наконец моя проблема решена. На самом деле я не мог получить его раньше. Я обнаружил, что в моей системе oracle 10.2.0 была установлена другая версия оракула. Я думаю, что это создало проблему. Я удалил обе версии из своей системы и снова установил oracle 11g, и внес некоторые изменения в свою программу, и это сработало. Вот моя программа с изменениями:
<%@ page import="java.sql.*" %>
<html>
<body>
<%
Connection conn;
Statement st;
ResultSet rs;
new oracle.jdbc.OracleDriver();
String dbURL="jdbc:oracle:thin:@localhost:1521:XE";
String userId="system";
String pwd="moon";
conn=DriverManager.getConnection(dbURL,userId,pwd);
st=conn.createStatement();
rs= st.executeQuery("SELECT * FROM login");
while(rs.next())
{%>
<%= rs.getString(1) %>
<%= rs.getString(2) %>
<% }
%>
</body>
</html>
Улучшение ответа duffymo:
Таким образом, правильный способ решить эту проблему:
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException ex) {
// YOU MUST IMPROVE THE ERROR MANAGEMENT
out.println("Error trying to load the OracleDriver, review the ojdbc6.jar!!");
ex.printStackTrace();
}
String dbURL="jdbc:oracle:thin:@localhost:1521:XE";
String userId="system";
String pwd="moon";
try (
Connection conn = DriverManager.getConnection(dbURL,userId,pwd);
Statement st=conn.createStatement();
){
try {
rs= st.executeQuery("SELECT * FROM login");
while(rs.next()) {
out.println(rs.getString(1)+" "+rs.getString(2)); //Maybe is prefereable print to HTTP response
}
} catch(SQLException sqlex) {
out.println("Error executing query!!"+sqlex.getMessage());
sqlex.printStackTrace();
}
} catch (SQLException e) {
out.println("Error trying to connect to the database!!"+e.getMessage());
e.printStackTrace();
}
Рекомендации: