【问题标题】:MySQL update method in java not working correctlyjava中的MySQL更新方法无法正常工作
【发布时间】:2019-04-04 02:13:11
【问题描述】:

我为我的 MySQL 数据库编写了以下 UPDATE 方法。

public int update(User u) {

    int status = 0;
    Connection connection = null;
    PreparedStatement stm = null;

    try {
        connection = ConnectionConfiguration.getConnection();
        stm = connection.prepareStatement("UPDATE users SET f_name=? 
              l_name=? WHERE id=?");

        stm.setString(1, u.getName());
        stm.setString(2, u.getLname());
        stm.setInt(3, u.getId());

        status = stm.executeUpdate();

    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        if(stm != null) {
            try {
                stm.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    } return status;

}

然后我更新 JSP 类中的数据,如下所示:

<% int id =Integer.parseInt(request.getParameter("Userid")); 
   UserM um = new UserM(); 
   User u = new User();
   u = um.select(id);
%>
<form method="GET" action="EditServlet">
<input type="hidden" name="id" value="<%=u.getId()%>">
Name:<input type="text" name="fname" value="<%=u.getName()%>"><br>
Last name:<input type="text" name="lname" value="<%=u.getLname()%>"><br>

<input type="submit" value="Edit">
</form>

在 EditServlet 中我编写了以下代码。

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

    String rid=request.getParameter("id");  
    int id=Integer.parseInt(rid);  
    String fname =request.getParameter("fname");  
    String lname=request.getParameter("lname");  


    User u =new User();  
    u.setName(fname);  
    u.setLname(lname); 
    u.setId(id);
    UserM um = new UserM(); 
    int up_status = um.update(u);  

    if(up_status > 0) {

        request.getRequestDispatcher("/GetUserInfo").forward(request, response); 
    } else {  
        request.setAttribute("errorMessage", "Could not change info");
        request.getRequestDispatcher("/GetUserInfo").forward(request, response);  
    }

}  

在我运行代码并更新数据后,它每次都会显示错误消息。我的代码实现有什么问题吗?

【问题讨论】:

  • 它每次都显示错误消息 - 那会是什么错误?同样在update res 是什么?
  • 错误信息是我用 request.setAttribute("errorMessage", "Could not change info");这就是它所做的一切。它不会更新任何数据
  • 不,它没有显示任何异常
  • 不相关: 使用try-with-resources 消除所有时髦(和片状)close() 逻辑。
  • 另外你为什么在JSP中做select部分?,你确定检索到记录吗?为什么在发布表格时使用Get?是时候做一些调试了

标签: java html mysql jsp servlets


【解决方案1】:

在这段代码中

User u =new User();  
u.setName(fname);  
u.setLname(lname);

您没有设置User::id 的值,因此当您在update(User u) 中使用它时,该值将为零。

改成

User u =new User();  
u.setName(fname);  
u.setLname(lname);
u.setId (id);

【讨论】:

  • 抱歉这个错误。实际上,我的代码中确实有它。我一定是忘记写在这里了。
  • 那么在这种情况下,您的数据库中似乎没有id的用户
  • 好吧,我确实检查了我的数据库,并且有一个具有给定 ID 的用户,所以我不知道问题是什么。
【解决方案2】:

问题出在我的 SQL 语句上。我忘记了 f_name 后面的逗号。它应该是: "UPDATE users SET f_name=?, l_name=?WHERE id=?"

【讨论】:

  • 您问题的第 1 版有这个 , - 我们如何才能成功回答?
  • 这是因为当我在这里写它时,我把它放在了我的原始代码中,我忘记了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2015-01-06
  • 2013-04-07
  • 2013-11-08
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多