无法连接 Tomcat 6 和 oracle 10g XE 进行 jsp 数据库连接

Posted

技术标签:

【中文标题】无法连接 Tomcat 6 和 oracle 10g XE 进行 jsp 数据库连接【英文标题】:Can't connect Tomcat 6 and oracle 10g XE for jsp database connectivity 【发布时间】:2011-10-26 18:26:28 【问题描述】:

我正在使用 Eclispe ganymede、tomcat6 和 oracle 10g XE。我已经连接了所有这些。一切正常。

但我创建了一个 jsp 文件,该文件在数据库中创建了一个不起作用的表。没有错误。但是当我签入数据库时​​,没有创建表。

我的编码:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <%@page import="java.sql.*" %>
    <%
    Connection con=null;
      try
    
                Class.forName("oracle.jdbc.driver.OracleDriver");
        con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","123");
        Statement stmt=con.createStatement();
        stmt.executeUpdate("create table Black ( "
                  + "   id INT PRIMARY KEY, firstName VARCHAR(20), lastName VARCHAR(20), "
                  + "   title VARCHAR(20), salary INT " + ")");
        out.println("Table Created");

    
    catch(ClassNotFoundException e)
    
        out.println(e.getMessage());
    
    catch(NamingException e)
    
    out.println(e.getMessage());    
    
    finally
    
        try
        

            if(con!=null)
                con.close();

        
        catch(SQLException e)
        
        
    
    %>

    </body>
    </html>

这就是错误所说的:

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66) 在 java.lang.ClassLoader.loadClassInternal(未知来源) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(未知来源) 在 org.apache.jsp.data_jsp._jspService(data_jsp.java:73) 在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 在 java.lang.Thread.run(未知来源) java.lang.ClassNotFoundException:oracle.jdbc.OracleDriver 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66) 在 java.lang.ClassLoader.loadClassInternal(未知来源) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(未知来源) 在 org.apache.jsp.data_jsp._jspService(data_jsp.java:73) 在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 在 java.lang.Thread.run(未知来源) java.lang.ClassNotFoundException:oracle.jdbc.OracleDriver 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128) 在 org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66) 在 java.lang.ClassLoader.loadClassInternal(未知来源) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(未知来源) 在 org.apache.jsp.data_jsp._jspService(data_jsp.java:73) 在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 在 java.lang.Thread.run(Unknown Source)

现在有人告诉我如何将这个程序连接到数据库。

【问题讨论】:

包含 oracle 驱动程序后效果如何?您可以将 oracle 驱动程序 jar 放在项目的构建路径中,也可以放在 tomcat 中的某个 lib/ 下。 我已将 oracle 驱动程序放入我的构建路径并引发此错误。 嗯,错误是由于构建/运行配置,而不是在您的代码中。 ClassNotFoundException 表示某处缺少 .jar。如果它位于运行它的 tomcat 服务器的 lib 目录下,应该可以找到它。它可以在您的构建路径中,但不在您的 .war 或 .ear 中,或者您如何部署它。 我不知道它的名字,包含 oracle.jdbc.driver.OracleDriver 类的那个。从名称来看,它是 oracle jdbc 驱动程序,您可以从 oracles 网站下载。 Tomcat 没有预装该驱动程序,因此您需要添加它。 那么,你有没有把 ojdbcX.jar 添加到你的 tomcat 的 lib 目录中?然后发生了什么? 【参考方案1】:

输出是什么,有堆栈跟踪吗?您是否将数据源定义为 testdb?

无论如何,您都不应该从 JSP 页面执行 sql-statements,将 sql-statements 放在 DAO 后面或使用 Hibernate 或类似的 ORM 工具。

这里是 Oracles JDBC 驱动程序的 http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html 下载页面。为您的数据库选择匹配的一个,以及您的 Java vm 的匹配版本。并将它放在你的tomcats lib/目录下。

【讨论】:

再次检查是否有堆栈跟踪【参考方案2】:

是否引发了任何异常?不要在 Jsp 中使用 JDBC 连接代码。而是保留在 DAO 类中。

也可以使用jsp标签库。

SQL Tag Library

检查此链接以解决问题。

Oracle.jdbc. driver.OracleDriver problem

【讨论】:

根据异常java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver Oracle驱动不在classpath中。 在类路径中包含 classes12.jar 尝试在类路径中添加 ojdbc14.jar。【参考方案3】:

您需要在项目的部署程序集中包含 ojdbc14.jar 文件。 使用日食:

proj --> 属性 --> 部署程序集 --> 添加 --> 添加您的 jar 文件。

【讨论】:

【参考方案4】:

我想在我的项目中添加我必须更改的内容:

String driverName = "oracle.jdbc.driver.OracleDriver";

String driverName = "oracle.jdbc.OracleDriver";

我正在使用 Oracle Database 11g 第 2 版。

【讨论】:

以上是关于无法连接 Tomcat 6 和 oracle 10g XE 进行 jsp 数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g DBCP 网络适配器无法建立连接

使用 tomcat 6 dbcp 和 oracle 11 瘦驱动程序的堆空间不足

无法使用 JAVA1.8 和 Tomcat 8.5.28 从 ConnectionWrapper 转换为 oracle.jdbc.OracleConnection

仍然无法通过 VisualVM 远程连接 Tomcat 6

tomcat 6..0.20 连接池配置 SQL server 2000数据库

tomcat动态部署项目及部署远程oracle数据库