【问题标题】:Servlet Cannot edit record from databaseServlet 无法编辑数据库中的记录
【发布时间】:2015-01-08 17:39:39
【问题描述】:

我有一个 servlet,它应该从我的数据库中更新一条记录。 我的代码一定有问题,因为 tomcat 显示错误:java.lang.NumberFormatException: null @package_ergasia.EditProtein.doPost(EditProtein.java:36) 这是这一行:int i = Integer.parseInt(request.getParameter("i"));

这是我的 Servlet:

package package_ergasia;

import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;    


public class EditProtein extends HttpServlet 
{
    Connection connection;  
    Statement statement;
    ResultSet  resultset;


   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException 
   {     
    response.setContentType("text/html");
    Connection connection= null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "ergasia";    
    String user = "root";
    String password = "password";
    String id = request.getParameter("id");
    String name = request.getParameter("pname");
    String desc = request.getParameter("desc");
    String seq = request.getParameter("seq");  
    int i = Integer.parseInt(request.getParameter("i"));


          try { 
            connection = DriverManager.getConnection(url + dbName, user, password); 

            PreparedStatement ps = connection.prepareStatement("UPDATE protein SET pdb_id=?,proteinName=?,description=?,proteinSequence=? WHERE i=?");
            ps.setString(1, id);
            ps.setString(2, name);
            ps.setString(3, desc);
            ps.setString(4, seq);
            ps.setInt(5, i);

            ps.executeUpdate();   
            RequestDispatcher view = request.getRequestDispatcher("/InsertProtein");
            view.forward(request, response);                

        } catch (SQLException e) {            
            e.printStackTrace();

        }


   }
}  

这是带有表单的jsp,用户可以在其中更新数据:

<%@page import="java.util.Iterator"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" import="java.sql.*"%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="../CSS/mystyle.css">        
    </head>
    <body>
          <h1>Welcome</h1>
          <form method="post" action="/EditProtein">
              <fieldset style="width: 100px"> 
              <legend>Update protein table</legend>  
          <table border="1">

<% 
int count = 0;    


                if (session.getAttribute("EditData") != null) {
                    ArrayList al1 = (ArrayList) session.getAttribute("EditData");
                    Iterator itr = al1.iterator();

                    while (itr.hasNext()) {
                        count++;


                        ArrayList pList = (ArrayList) itr.next();
%>                              

                    <tr>  
                        <td>pdb_id</td> 
                         <td><input type="text" disabled="disabled" font="Verdana" name="id" value="<%=pList.get(0)%>"</td>                       
                    </tr>  
                    <tr>  
                        <td>Protein Name</td>  
                        <td><input type="text" font="Verdana" name="pname" value="<%=pList.get(1)%>"</td>                          
                    </tr>  
                    <tr>  
                        <td>Description</td>  
                        <td><input type="text" font="Verdana" name="desc" value="<%=pList.get(2)%>"</td>                          
                    </tr>  
                    <tr>  
                        <td>Sequence</td>  
                        <td><input type="text" font="Verdana" name="seq" value="<%=pList.get(3)%>"</td>                          
                    </tr> 
                     <tr>  
                        <td>i</td>  
                        <td><input type="number" disabled="disabled" font="Verdana" name="i" value="<%=pList.get(4)%>"</td>                          
                    </tr> 
                    <tr>  
                        <td><input type="submit" value="Update"></td>
                        <td><input type="reset" value="Reset"></td>
                    </tr>   
                    <% }} %>

          </table>
            </fieldset>   
        </form> 
    </body>
</html>

非常感谢您的帮助!

【问题讨论】:

  • java.lang.NumberFormatException: null on this line Integer.parseInt(request.getParameter("i")); 表示由于某些不清楚的原因,无法从问题中提供的代码中想象到来自传入请求的名称为 i 的请求参数。你如何传递这个请求参数?您可能忘记传递此参数或命名不同的名称。请尝试查看另一侧。
  • 附带说明:您不能将ConnectionStatement(或PreparedStatement)和ResultSet 声明为类成员。它们应该在尽可能短的范围内精确地使用和关闭,这通常是使用它们的方法(Servlet 是线程不安全的资源,并且具有应用程序范围的范围。它们都将在所有请求中重用/共享)。
  • 看起来我不能传递任何参数。我添加了 jsp,其中包含用户编辑数据的表单。到目前为止,它工作正常,因为表单成功加载了数据。
  • 您尚未关闭任何&lt;input type="text"/&gt; 元素。这是一个无效的 HTML 标记。例如,&lt;input type="text" font="Verdana" name="pname" value="&lt;%=pList.get(1)%&gt;" 应更改为 &lt;input type="text" font="Verdana" name="pname" value="&lt;%=pList.get(1)%&gt;"/&gt;。仔细查看标签的最后。还可以尝试在您喜欢的浏览器上查看生成的 HTML,以查看 HTML 代码是否正确呈现,您将能够找出代码中的错误。
  • 附带说明:您不应该依赖客户端的 disabled/readonly 属性,因为这样的事情很容易被用户绕过(这很容易,即使是孩子也可以这样做:))。您应该准确地在服务器端以及在您的实际应用程序中进行验证(除了客户端验证,如果有的话)。

标签: database jsp servlets edit record


【解决方案1】:

这里可能的错误行是

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

request.getParameter("i") 在您的上一页上未正确设置。 在这个 servlet 参数值中获取为 null,或其他数字(如 i76 - i 不是数字)。

检查你的上一页我设置了。

【讨论】:

  • 如果提供的参数i 有一个Stringi76,则将其解析为int 会导致异常java.lang.NumberFormatException: For input string: "i76"
  • 添加了我的上一页,好像无法加载任何参数。
  • 检查上一页参数名称是否为“i”??就像;
【解决方案2】:

检查参数 i 是否发送。因为如果未设置,request.getParameter("i") 将返回 null,当您尝试将其转换为 int 时会出现错误

【讨论】:

  • 添加了我的上一页,好像无法获取任何参数。
猜你喜欢
  • 1970-01-01
  • 2012-06-13
  • 2016-05-18
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多