【问题标题】:Unable to execute jdbc query on a servlet [duplicate]无法在 servlet 上执行 jdbc 查询 [重复]
【发布时间】:2017-04-28 19:54:53
【问题描述】:

我正在尝试创建一个 html 页面,该页面需要一些输入并使用 jdbc 和 servlet 将该数据保存在 oracle 数据库中。 这是 HTML 文件

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="HelloServlet" method="post">
	<input type="text" placeholder="ID" name="id">
	<input type="text" placeholder="NAME" name="name">
	<input type="text" placeholder="SALARY" name="salary">
	<input type="submit" value="submit">
</form>	
</body>
</html>

这里是包含servlet的javafile

package com.gaurav;
import java.sql.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.jasper.tagplugins.jstl.core.Out;
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {

private static final long serialVersionUID = 1L;


@Override
protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    // Set response content type


    // Actual logic goes here.

    //String name=request.getParameter("name");
    //out.println(name);

}

@Override
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String url="jdbc:oracle:thin:@localhost:1521:xe";
    String user="system";
    String pass="inception";


    try{
        int id=Integer.parseInt(request.getParameter("id"));
        String name=request.getParameter("name");
        int salary=Integer.parseInt(request.getParameter("salary"));
        Class.forName("oracle.jdbc.driver.OracleDriver");  
        Connection con=DriverManager.getConnection(url,user,pass);
        String query="INSERT INTO employee VALUES(?,?,?)";
        PreparedStatement stm=con.prepareStatement(query);
        stm.setInt(1, id);
        stm.setString(2, name);
        stm.setInt(3, salary);
        stm.executeUpdate();
        con.close();
    }

    catch(ClassNotFoundException e){
        out.println("class not found ");
    }
    catch(SQLException e){
        out.println("SQL Exception");
    }



}

@Override
public void destroy() {
    // resource release
    super.destroy();
}
}

file hierarchy

每当我尝试运行上述程序时,它都不会显示任何错误,但是当我编写一些数据并按下提交按钮时,它会引发 ClassNotFound 异常。我不知道发生了什么。所以有人帮助我.

堆栈跟踪:

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.gaurav.HelloServlet.doPost(HelloServlet.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

【问题讨论】:

    标签: java servlets jdbc oracle10g


    【解决方案1】:

    检查您是否在项目中加载了正确的 oracle jar 驱动程序。

    【讨论】:

      【解决方案2】:

      看起来您使用的是 Oracle 10g。从 Oracle 9i 开始,不推荐支持 oracle.jdbc.driver.OracleDriver(文档 here)。您可以尝试改用oracle.jdbc.OracleDriver 吗?

      【讨论】:

        猜你喜欢
        • 2017-04-28
        • 1970-01-01
        • 2020-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-05
        • 2020-07-27
        相关资源
        最近更新 更多