Метод обновления MySQL в Java не работает правильно - PullRequest
0 голосов
/ 31 октября 2018

Я написал следующий метод UPDATE для моей базы данных MySQL.

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);  
    }

}  

После запуска кода и обновления данных каждый раз отображается сообщение об ошибке. Что-то не так с реализацией моего кода?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Проблема была с моим оператором SQL. Я забыл запятую после f_name. Это должно было быть: "ОБНОВЛЕНИЕ пользователей SET f_name = ?, l_name =? WHERE id =?"

0 голосов
/ 31 октября 2018

В этом коде

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...