使用单个servlet创建crud页面时出错

时间:2016-12-14 18:04:24

标签: java forms servlets jdbc oracle10g

我正在尝试通过比较html页面中的提交按钮的值并根据执行分配给该提交按钮值的功能来创建一个在数据库上执行不同功能(创建,读取,更新,删除)的servlet。 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="add" name="submit">
    <input type="submit" value="view" name="submit">
    <input type="submit" value="update" name="submit">
</form> 
</body>
</html>

JavaFile(Servlet的):

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

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;

    private String url="jdbc:oracle:thin:@localhost:1521:xe";
    private String user="system";
    private String pass="inception";
    @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();
        int id=Integer.parseInt(request.getParameter("id"));
        String name=request.getParameter("name");
        int salary=Integer.parseInt(request.getParameter("salary"));
        try{

        Class.forName("oracle.jdbc.driver.OracleDriver");

        }
        catch(ClassNotFoundException e){
            out.println("class not found ");
            e.printStackTrace();
        }
        if(request.getParameter("submit").equals("add")){ 
        try{

            Connection con=DriverManager.getConnection(url,user,pass);
            //Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","inception");
            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();
            //.println(value);
            out.println("Record Added");
            con.close();
        }


        catch(SQLException e){
            out.println("SQL Exception");
            e.printStackTrace();
        }
        }
        if(request.getParameter("submit").equals("view")){ 
            try{
                Connection con=DriverManager.getConnection(url,user,pass);
                Statement stm=con.createStatement();
                ResultSet res=stm.executeQuery("SELECT * FROM employee");
                while(res.next()){
                    out.println(res.getString("id")+","+res.getString("name")+","+res.getString("salary"));
                }
                out.println("Records");
                con.close();
            }
            catch(SQLException e){
                out.println("SQL Exception");
                e.printStackTrace();
            }
        }
        if(request.getParameter("submit").equals("update")){
            try{
            Connection con=DriverManager.getConnection(url,user,pass);
            String query="UPDATE employee SET name=?,salary=? WHERE id=?";
            PreparedStatement stm=con.prepareStatement(query);
            stm.setString(1, name);
            stm.setInt(2, salary);
            stm.setInt(3, id);
            stm.executeUpdate();
            //.println(value);
            out.println("Record Updated");
            con.close();
            }
            catch(SQLException e){

            }

        }


    }

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

问题是当我只是执行add函数时,它不会给我任何错误并且数据被添加到数据库中但是在添加视图功能之后,我开始获得数字格式异常。 所以有人请告诉我们这里的问题。 程序堆栈跟踪(单击视图按钮后):

SEVERE: Servlet.service() for servlet [com.gaurav.HelloServlet] in context with path [/Servlets] threw exception
java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.gaurav.HelloServlet.doPost(HelloServlet.java:40)
    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)

2 个答案:

答案 0 :(得分:0)

根据您的堆栈跟踪,例外情况发生在第40行..我的统计数据是:

int id=Integer.parseInt(request.getParameter("id"));

servlet似乎没有收到id,所以问题出现了。我建议你在调试模式下运行并检查servlet上正在接收哪些属性。

答案 1 :(得分:0)

而不是使用列名res.getString(&#34; id&#34;)来获取记录;使用索引位置来获取如下的数据。

 while(res.next())
{
out.println(res.getInt(1)+" "+res.getString(2)+" "+res.getString(3));
}