【问题标题】:Error connecting to oracle database in tomcat server using jsp使用jsp连接到tomcat服务器中的oracle数据库时出错
【发布时间】:2014-07-20 06:15:02
【问题描述】:

尝试了一切,但无法解决问题。 我使用的是 Windows 8 企业版(如果这与问题有关)

  • Oracle 11.2.0
  • JDK 1.7.0
  • Apache tomcat 服务器 8.0
  • 编辑器:记事本

我在 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 的 cmets 错误是:

HTTP 状态 500 - 在第 14 行处理 JSP 页面 /page2.jsp 时发生异常。第 14 行是 conn=DriverManager.getConnection(dbURL,userId,pwd)

java.lang.ClassNotFoundException: org.apache.jsp.new_jsp 服务器遇到一个内部错误,阻止它完成这个请求。

【问题讨论】:

  • 错误信息是????
  • java.lang.ClassNotFoundException: org.apache.jsp.new_jsp 服务器遇到一个内部错误,阻止它完成这个请求。

标签: java oracle jsp tomcat jdbc


【解决方案1】:

我不建议您这样做。 Scriptlet 代码和数据库调用不属于 JSP。这是一个更长的讨论。

但直接的问题是您的连接 URL 不正确:

String dbURL="jdbc:odbc:oracle:thin:@localhost:1521:XE";

应该是

String dbURL="jdbc:oracle:thin:@localhost:1521:XE"

Tomcat 将忽略所有系统环境变量。我建议您永远不要以这种方式设置 CLASSPATH。

正确的做法是将ojdbc6.jar放在Tomcat服务器的/lib文件夹中。

在您的网络应用程序的 WEB-INF/lib 中添加其他 3rd 方 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.
}

【讨论】:

  • 这仍然在 conn=DriverManager.getConnection(dbURL,userId,pwd); 行中显示相同的错误;
  • 当我在浏览器中运行它时,它给出:HTTP Status 500 - 在第 14 行处理 JSP 页面 /page2.jsp 时发生异常。第 14 行是 conn=DriverManager.getConnection(dbURL,userId,pwd )
  • 我已经将 ojdbc6.jar 放入 lib 文件中。但是无法将第三方 jar 放入 web inf 中。
  • HTTP 500 表示:en.wikipedia.org/wiki/List_of_HTTP_status_codes。除了 Oracle JDBC,您还有第三方 JAR 吗?您知道如何创建 WAR 文件吗?您可能遇到打包或部署问题。
  • 我没有其他的 jars。我不知道 WAR 文件。我是第一次使用这个 tomcat 服务器..
【解决方案2】:

改进 duffymo 答案:

  • forName 方法不接受 Class 对象。
  • 由于您使用的是 Java 7,因此您可以对资源使用 try。

所以解决这个问题的正确方法是执行以下操作:

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

建议:

  • 不建议从 JSP 调用数据库,您可以搜索有关 MVC 设计模式的信息。
  • 您还可以阅读一些有助于实现 MVC 的框架,例如:
    • Java 服务器端
    • Spring MVC
    • 检票口

【讨论】:

  • forName 不错;谢谢。我个人不喜欢以这种方式嵌套 try/catch。我认为它不必要地使代码混乱。
【解决方案3】:

我的问题终于解决了。 实际上我以前无法得到它。 我发现我的系统 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    相关资源
    最近更新 更多