How to Edit Data using JSP, Servlet and MYSQL

How to edit data using JSP and servlet. In this java web application development tutorial, We will see how to add the Edit button in the user list records and perform the edit operation using JSP, servlet, and MYSQL.

Steps to perform Edit operation using JSP and servlet

Step 1) Add an Edit button or link in the userList.jsp with a query string that contains the id of the selected user. And send the request to RegistrationCTL.

<td><a href="RegistrationCTL?id=<%=user.getId()%>">Edit</a></td>

Step 2) In RegistrationCTL, Under the doGet method: get id as request and get data from the database by the Id. and again set the data as request and forward it to registration.jsp.

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

//Edit....
  UserModel model = new UserModel();
  long id = DataUtility.getLong(request.getParameter("id"));
  if(id>0) {
    UserBeans bean = null;
    bean = model.FindByPk(id);
    request.setAttribute("bean", bean);

  }
  
  
  request.getRequestDispatcher("jsp/registration.jsp").forward(request, response);

}

Get data from Database by ID

public static UserBeans  FindByPk(long id) {
    Connection con;
    UserBeans user = null;
    try {
      con = JDBCDataSource.getConnection();
      PreparedStatement stmt = con.prepareStatement("Select * from user where id=?");
      stmt.setLong(1,id);
      ResultSet rs = stmt.executeQuery();
      if(rs.next()) {
        user = new UserBeans();
        System.out.println("ID: "+rs.getLong("id"));
        user.setId(rs.getLong("id"));
        user.setFirstName(rs.getString("fname"));
        user.setLastName(rs.getString("lname"));
        user.setLogin(rs.getString("login"));
        user.setPassword(rs.getString("password"));
        user.setDob(rs.getDate("dob"));
        user.setMobileNo(rs.getString("mobile"));  
      }
      
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    
    return user;
  }

Step 3) In registration.jsp: Get the request data as a bean object and set it with every field.

<jsp:useBean id="bean" class="com.javawebapp.beans.UserBeans" scope="request"></jsp:useBean>

SetData

<input type="text"   class="form-control" placeholder="Enter First Name"
                  name="firstName" value="<%=DataUtility.getStringData(bean.getFirstName()) %>" >

So the user can see the data and change the data to update the record. Now in the next step insert the data to the database.

Step 3) When the user submit the updated data. It mean request send to RegistrationCTL. but this time it will send as a post request.

Get the data as request and pass the object to the Update method. The Update method will update the records in Database.

UserBeans user = new UserBeans();
    user.setFirstName(request.getParameter("firstName"));
    user.setLastName(request.getParameter("lastName"));
    user.setLogin(request.getParameter("login"));
    user.setPassword(request.getParameter("password"));
    user.setDob(DataUtility.getDate(request.getParameter("dob")));
    user.setMobileNo(request.getParameter("mobile"));
    
    user.setId(DataUtility.getLong(request.getParameter("id")));
    if(user.getId()>0) {
    	//To Update the records
    	 long i = UserModel.UpdateUser(user);
    	    if(i>0) {
    	      ServletUtility.setSuccessMessage("User Update sucessfully", request);
    	      
    	    }else {
    	      ServletUtility.setErrorMessage("Not insterted", request);
    	    }
    	   
    	
    }

Update method

public static long UpdateUser(UserBeans user) {
      int i = 0;
      try {
        Connection conn = JDBCDataSource.getConnection();
        PreparedStatement stmt = conn.prepareStatement("update user set fname=?, lname=?, login=?,password=?,dob=?,mobile=? where id=?");
        
        stmt.setString(1 , user.getFirstName() );
        stmt.setString(2 , user.getLastName() );
        stmt.setString(3 , user.getLogin() );
        stmt.setString(4 , user.getPassword() );
        stmt.setDate(5 , new java.sql.Date(user.getDob().getTime()) );
        stmt.setString(6 , user.getMobileNo() );
        stmt.setLong(7, user.getId());
          i =   stmt.executeUpdate();
        
      } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      
      
      return i;
    }

If the data successfully enter in the database. It will return a message that will forward to the view part.

Get the new Updated files

registration.jsp

<%@page import="com.javawebapp.utility.DataUtility"%>
<%@page import="com.javawebapp.beans.UserBeans"%>
<%@page import="com.javawebapp.utility.ServletUtility"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>UserRegistration</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
 <script>
 $( function() {
      $( "#datepicker" ).datepicker({
        dateFormat : 'mm/dd/yy',
        changeMonth: true,
        changeYear: true
      });
    } );
  </script>
</head>
<body>
<%@ include file="header.jsp"%>
  <main class="login-form">
  <div class="cotainer">
    <div class="row justify-content-center">
      <div class="col-md-8">
        <div class="card">
          <div class="card-header">
            User Registration
            
          </div>
            <%=ServletUtility.getSuccessMessage(request)%>
            <%=ServletUtility.getErrorMessage(request)%>
            <jsp:useBean id="bean" class="com.javawebapp.beans.UserBeans" scope="request"></jsp:useBean>
            
          <div class="card-body">
            <form action="/javawebapp/RegistrationCTL" method="post">
              <input type="hidden" name="id" value="<%=DataUtility.getStringData(bean.getId())%>"> 
              <div class="form-group row">
                <label for="email_address" 
                  class="col-md-4 col-form-label text-md-right">First Name<font color="red"></font></label>
                <div class="col-md-6">
                  <input type="text"   class="form-control" placeholder="Enter First Name"
                    name="firstName" value="<%=DataUtility.getStringData(bean.getFirstName()) %>" >
                    <font  color="red"></font>
                </div>
              </div>
              
              <div class="form-group row">
                <label for="email_address" 
                  class="col-md-4 col-form-label text-md-right">Last Name<font color="red"></font></label>
                <div class="col-md-6">
                  <input type="text"   class="form-control" placeholder="Enter Last Name"
                    name="lastName" value="<%=DataUtility.getStringData(bean.getLastName()) %>" >
                    <font  color="red"></font>
                </div>
              </div>
              <div class="form-group row">
                <label for="email_address" 
                  class="col-md-4 col-form-label text-md-right">Login Id<font color="red"></font></label>
                <div class="col-md-6">
                  <input type="text" id="email_address"  class="form-control" placeholder="Enter Login Id"
                    name="login" value="<%=DataUtility.getStringData(bean.getLogin()) %>" >
                    <font  color="red"></font>
                </div>
              </div>
              
              
              <div class="form-group row">
                <label for="email_address" 
                  class="col-md-4 col-form-label text-md-right">Password<font color="red"></font></label>
                <div class="col-md-6">
                  <input type="password" id="email_address"  class="form-control" placeholder="Enter password"
                    name="password" value="<%=DataUtility.getStringData(bean.getPassword()) %>" >
                    <font  color="red"></font>
                </div>
              </div>
              
              <div class="form-group row">
                <label for="email_address" 
                  class="col-md-4 col-form-label text-md-right">Date Of Birth<font color="red"></font></label>
                <div class="col-md-6">
                  <input type="text"  id="datepicker" class="form-control" placeholder="Enter Date Of Birth"
                    name="dob" value="<%=DataUtility.getDateString(bean.getDob()) %>" >
                    <font  color="red"></font>
                </div>
              </div>
              
              
              
              <div class="form-group row">
                <label for="email_address" 
                  class="col-md-4 col-form-label text-md-right">Mobile No.<font color="red"></font></label>
                <div class="col-md-6">
                  <input type="text" id="email_address"  class="form-control" placeholder="Enter Mobile No"
                    name="mobile" value="<%=DataUtility.getStringData(bean.getMobileNo()) %>" >
                    <font  color="red"></font>
                </div>
              </div>
              <div class="col-md-6 offset-md-4">
                <input type="submit" class="btn btn-primary" name="operation" value="Register">
                
              </div>
            </form>
          </div>
        </div>
      </div>
    </div>
  </div>
  </main>
  <div style="margin-top: 120px">
    <%@ include file="footer.jsp"%>
  </div>
</body>
</html>

UserModel.java

package com.javawebapp.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.javawebapp.beans.UserBeans;
import com.javawebapp.utility.JDBCDataSource;
import jdk.nashorn.internal.ir.WhileNode;

public class UserModel {

  public static long nextPk() {
    long pk = 0;
    Connection conn;
    try {
      conn = JDBCDataSource.getConnection();
      PreparedStatement stmt = conn.prepareStatement("select Max(id) from user");
      ResultSet rs = stmt.executeQuery();
      while (rs.next()) {
        pk = rs.getLong(1);
      }
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return pk + 1;

  }

  public static long addUser(UserBeans user) {
    int i = 0;
    try {
      Connection conn = JDBCDataSource.getConnection();
      PreparedStatement stmt = conn.prepareStatement("insert into user values(?,?,?,?,?,?,?)");
      stmt.setLong(1, nextPk());
      stmt.setString(2, user.getFirstName());
      stmt.setString(3, user.getLastName());
      stmt.setString(4, user.getLogin());
      stmt.setString(5, user.getPassword());
      stmt.setDate(6, new java.sql.Date(user.getDob().getTime()));
      stmt.setString(7, user.getMobileNo());
      i = stmt.executeUpdate();

    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return i;
  }

  public static UserBeans UserLogin(String login, String password) {
    Connection con;
    UserBeans user = null;
    try {
      con = JDBCDataSource.getConnection();
      PreparedStatement stmt = con.prepareStatement("Select * from user where login=? and password = ?");
      stmt.setString(1, login);
      stmt.setString(2, password);
      ResultSet rs = stmt.executeQuery();
      if (rs.next()) {
        user = new UserBeans();
        System.out.println("ID: " + rs.getLong("id"));
        user.setId(rs.getLong("id"));
        user.setFirstName(rs.getString("fname"));
        user.setLastName(rs.getString("lname"));
        user.setLogin(rs.getString("login"));
        user.setPassword(rs.getString("password"));
        user.setDob(rs.getDate("dob"));
        user.setMobileNo(rs.getString("mobile"));
      }

    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return user;
  }

  public static List list() {
    ArrayList list = new ArrayList();
    Connection conn = null;
    try {
      conn = JDBCDataSource.getConnection();
      System.out.println("List Sieze: " + list.size());
      PreparedStatement pstmt = conn.prepareStatement("select * from user");
      System.out.println("List Sieze: " + list.size());
      ResultSet rs = pstmt.executeQuery();
      System.out.println("List Sieze: " + list.size());
      while (rs.next()) {
        UserBeans user = new UserBeans();
        user.setId(rs.getLong("id"));
        user.setFirstName(rs.getString("fname"));
        user.setLastName(rs.getString("lname"));
        user.setLogin(rs.getString("login"));
        user.setPassword(rs.getString("password"));
        user.setDob(rs.getDate("dob"));
        user.setMobileNo(rs.getString("mobile"));
        list.add(user);
      }
      System.out.println("List Sieze: " + list.size());
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      JDBCDataSource.closeConnection(conn);
    }
    return list;
  }

  // Edit Records

  public static UserBeans FindByPk(long id) {
    Connection con;
    UserBeans user = null;
    try {
      con = JDBCDataSource.getConnection();
      PreparedStatement stmt = con.prepareStatement("Select * from user where id=?");
      stmt.setLong(1, id);
      ResultSet rs = stmt.executeQuery();
      if (rs.next()) {
        user = new UserBeans();
        System.out.println("ID: " + rs.getLong("id"));
        user.setId(rs.getLong("id"));
        user.setFirstName(rs.getString("fname"));
        user.setLastName(rs.getString("lname"));
        user.setLogin(rs.getString("login"));
        user.setPassword(rs.getString("password"));
        user.setDob(rs.getDate("dob"));
        user.setMobileNo(rs.getString("mobile"));
      }

    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return user;
  }

  public static long UpdateUser(UserBeans user) {
    int i = 0;
    try {
      Connection conn = JDBCDataSource.getConnection();
      PreparedStatement stmt = conn
          .prepareStatement("update user set fname=?, lname=?, login=?,password=?,dob=?,mobile=? where id=?");

      stmt.setString(1, user.getFirstName());
      stmt.setString(2, user.getLastName());
      stmt.setString(3, user.getLogin());
      stmt.setString(4, user.getPassword());
      stmt.setDate(5, new java.sql.Date(user.getDob().getTime()));
      stmt.setString(6, user.getMobileNo());
      stmt.setLong(7, user.getId());
      i = stmt.executeUpdate();

    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return i;
  }

}

userList.jsp

<%@page import="com.javawebapp.utility.DataUtility"%>
<%@page import="com.javawebapp.beans.UserBeans"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="com.javawebapp.utility.ServletUtility"%>
<%@ include file="header.jsp"%>
<br>
<h2>User List</h2>
<br>
<h4 style="color: red;"><%=ServletUtility.getErrorMessage(request)%></h4>
<h4 style="color: green;"><%=ServletUtility.getSuccessMessage(request)%></h4>
<table class="table table-striped">
  <thead>
    <tr>
      <th scope="col">Id</th>
      <th scope="col">Name</th>
      <th scope="col">Login</th>
      <th scope="col">MobileNo</th>
      <th scope="col">Date of Birth</th>
       <th scope="col">Action</th>
    </tr>
  </thead>
  <tbody>
  <%
      int index=1;
      List list=ServletUtility.getList(request);
      Iterator it=list.iterator();
      while(it.hasNext()){
      UserBeans user=(UserBeans)it.next();
  %>
    <tr>
      <th scope="row"><%=index++%></th>
      <td><%=user.getFirstName()+" "+user.getLastName()%></td>
      <td><%=user.getLogin()%></td>
      <td><%=user.getMobileNo()%></td>
      <td><%=DataUtility.getDateString(user.getDob())%></td>
      <td><a href="RegistrationCTL?id=<%=user.getId()%>">Edit</a></td>
    </tr>
<%} %>
  </tbody>
</table>
<%@ include file="footer.jsp"%>

RegistrationCTL.java(servlet)

package com.javawebapp.Controller;
import java.io.IOException;
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 com.javawebapp.beans.UserBeans;
import com.javawebapp.model.UserModel;
import com.javawebapp.utility.DataUtility;
import com.javawebapp.utility.ServletUtility;
/**
 * Servlet implementation class RegistrationCTL
 */
@WebServlet(name = "RegistrationCTL", urlPatterns = {"/RegistrationCTL"})
public class RegistrationCTL extends HttpServlet {
  private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RegistrationCTL() {
        super();
        // TODO Auto-generated constructor stub
    }
  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  //Edit....
    UserModel model = new UserModel();
    long id = DataUtility.getLong(request.getParameter("id"));
    if(id>0) {
      UserBeans bean = null;
      bean = model.FindByPk(id);
      request.setAttribute("bean", bean);

    }
    
    
    request.getRequestDispatcher("jsp/registration.jsp").forward(request, response);

  }
  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    
    UserBeans user = new UserBeans();
    user.setFirstName(request.getParameter("firstName"));
    user.setLastName(request.getParameter("lastName"));
    user.setLogin(request.getParameter("login"));
    user.setPassword(request.getParameter("password"));
    user.setDob(DataUtility.getDate(request.getParameter("dob")));
    user.setMobileNo(request.getParameter("mobile"));
    
    user.setId(DataUtility.getLong(request.getParameter("id")));
    if(user.getId()>0) {
    	//To Update the records
    	 long i = UserModel.UpdateUser(user);
    	    if(i>0) {
    	      ServletUtility.setSuccessMessage("User Update sucessfully", request);
    	      
    	    }else {
    	      ServletUtility.setErrorMessage("Not insterted", request);
    	    }
    	   
    	
    }else {
    	//To add the new record
    	 long i = UserModel.addUser(user);
    	    if(i>0) {
    	      ServletUtility.setSuccessMessage("User register sucessfully", request);
    	      
    	    }else {
    	      ServletUtility.setErrorMessage("Not insterted", request);
    	    }
    }  
    request.getRequestDispatcher("jsp/registration.jsp").forward(request, response);
  }
}