尝试了一切,但无法解决问题。 我使用Windows 8企业版(如果这与问题有关)
我在d:中安装了oracle,在c:上安装了tomcat服务器。
我将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 - 在第14行处理JSP页面/page2.jsp时发生异常。第14行是conn = DriverManager.getConnection(dbURL,userId,pwd)
java.lang.ClassNotFoundException:org.apache.jsp.new_jsp服务器遇到内部错误,导致无法完成此请求。
答案 0 :(得分:1)
我不建议你这样做。 Scriptlet代码和数据库调用不属于JSP。这是一个更长的讨论。
但直接的问题是您的连接网址不正确:
String dbURL="jdbc:odbc:oracle:thin:@localhost:1521:XE";
应该是
String dbURL="jdbc:oracle:thin:@localhost:1521:XE"
Tomcat将忽略所有系统环境变量。我建议您永远不要设置CLASSPATH。
正确的做法是将ojdbc6.jar放在Tomcat server / lib文件夹中。
在您的网络应用的WEB-INF / lib中添加其他第三方JAR。
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.
}
答案 1 :(得分:0)
改善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();
}
建议:
答案 2 :(得分:0)
最后我的问题得到了解决。 实际上我以前无法得到它。 我发现在我的系统oracle 10.2.0上安装了另一个版本的oracle。 我认为这是造成问题的原因。我从我的系统中删除了两个版本并重新安装了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>