用户管理系统(四)——修改用户

发布于:2022-12-25 ⋅ 阅读:(623) ⋅ 点赞:(0)


前言

一个用户管理系统肯定具备增删改查,前面我完成了增的操作,现在来说一下改:首先修改用户,肯定是要先有数据才能对数据进行修改,所以当我们进行修改时应该是先查后改,把数据库查到的数据显示出来再修改,拿查询用户肯定是带参数进行查询,那么参数应该是个唯一值—id


一、效果展示

首先进入用户展示页面
在这里插入图片描述
我们点击修改zhangsan的信息
在这里插入图片描述
这里我们可以看到跳转到修改界面的时候是将zhangsan这个用户的所有信息展示出来,假如不带数据过来,那么我们将输入框输入修改的内容,后台也不知道我们要对谁进行修改
在这里插入图片描述
这里我们将性别改成女,由于前端将用户姓名写死导致姓名不能修改
在这里插入图片描述
修改之后的结果
在这里插入图片描述
就修改成功了

二、前端

 <div class="container" style="width: 400px;">
        <h3 style="text-align: center;">修改联系人</h3>
        <form action="${pageContext.request.contextPath}/updateUserServlet" method="post">
            <!--  隐藏域 提交id-->
            <input type="hidden" name="id" value="${user.id}">

          <div class="form-group">
            <label for="name">姓名:</label>
            <input type="text" class="form-control" id="name" name="name"  value="${user.name}" readonly="readonly" placeholder="请输入姓名" />
          </div>

          <div class="form-group">
            <label>性别:</label>
              <c:if test="${user.gender == ''}">
                  <input type="radio" name="gender" value="" checked /><input type="radio" name="gender" value=""  /></c:if>
              <c:if test="${user.gender == ''}">
                  <input type="radio" name="gender" value=""  /><input type="radio" name="gender" value="" checked  /></c:if>
          </div>

          <div class="form-group">
            <label for="age">年龄:</label>
            <input type="text" class="form-control" value="${user.age}" id="age"  name="age" placeholder="请输入年龄" />
          </div>

          <div class="form-group">
            <label for="address">籍贯:</label>
             <select name="address" id="address" class="form-control" >
                 <c:if test="${user.address == '陕西'}">
                    <option value="陕西" selected>陕西</option>
                    <option value="北京">北京</option>
                    <option value="上海">上海</option>
                 </c:if>

                 <c:if test="${user.address == '北京'}">
                     <option value="陕西" >陕西</option>
                     <option value="北京" selected>北京</option>
                     <option value="上海">上海</option>
                 </c:if>

                 <c:if test="${user.address == '上海'}">
                     <option value="陕西" >陕西</option>
                     <option value="北京">北京</option>
                     <option value="上海" selected>上海</option>
                 </c:if>
            </select>
          </div>

          <div class="form-group">
            <label for="qq">QQ:</label>
            <input type="text" id="qq" class="form-control" value="${user.QQ}" name="qq" placeholder="请输入QQ号码"/>
          </div>

          <div class="form-group">
            <label for="email">Email:</label>
            <input type="text" id="email" class="form-control" value="${user.email}" name="email" placeholder="请输入邮箱地址"/>
          </div>

             <div class="form-group" style="text-align: center">
                <input class="btn btn-primary" type="submit" value="提交" />
                <input class="btn btn-default" type="reset" value="重置" />
                <input class="btn btn-default" type="button" value="返回"/>
             </div>
        </form>
        </div>

三、后端

前端这里将唯一值id传给后台并发送请求给findUserServlet

 href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>&nbsp;

这里拿到前端传过来的id,用id作为条件去查询数据库的值

   //1.设置编码
        response.setContentType("text/html;charset=utf-8");
        //获取id根据id查找
        int id =Integer.parseInt(request.getParameter("id"));
        //业务层
        UserService userService=new UserServiceImpl();
        User user=userService.findByid(id);
        request.setAttribute("user",user);
        //转发:url不需要写/项目名  重定向: url 必须加 /项目名
        request.getRequestDispatcher("WEB-INF/jsp/update.jsp").forward(request,response);

这里我们是弱业务层,业务层就是调用Dao这里就直接看dao层
这个方法就是查询数据库的值并返回出去, paserResultSet(rs);是封装了解析result的方法

public User findById(int id) {
        Connection coon = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        try {
            coon = JdbcUtil.getConnection();
            String sql = "select * from tb_emp where id = ?";
            pstm = coon.prepareStatement(sql);
            pstm.setInt(1, id);
            rs = pstm.executeQuery();
            List<User> list = paserResultSet(rs);
            if (list == null || list.size() == 0) {
                return null;
            }
            return list.get(0);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(rs, pstm, coon);
        }
        return null;
    }

得到数据库储存的值,通过request域响应给前端,切记request是一次响应请求,同时通过转发跳转到修改页面(updape.jsp)

UserService userService=new UserServiceImpl();
        User user=userService.findByid(id);
  request.setAttribute("user",user);
        //转发:url不需要写/项目名  重定向: url 必须加 /项目名
        request.getRequestDispatcher("WEB-INF/jsp/update.jsp").forward(request,response)

这里就是对查询到的数据进行修改,修改成功or修改失败都会给与提示

//设置post编码
        request.setCharacterEncoding("utf-8");
        //设置响应编码
        response.setContentType("text/html;charset=utf-8");
        //请求参数s
        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        String gender =request.getParameter("gender");
        int age = Integer.parseInt(request.getParameter("age"));
        String address = request.getParameter("address");
        String qq = request.getParameter("qq");
        String email = request.getParameter("email");
        //封装
        User user=new User(id,name,gender,age,address,qq,email);
        //业务层
        UserService userService=new UserServiceImpl();
        boolean flag = userService.updateUser(user);
        System.out.println(user.getGender());
        //5.跳转到其他资源   如果数据存在request, 一定使用转发
        //如果没有, 推荐使用重定向, 可以转发
        PrintWriter out = response.getWriter();
        if(flag){
            out.print("<script>alert('修改成功');location.href='"
                    +request.getContextPath()+"/queryByPage'</script>");
        }else{
            out.print("<script>alert('修改失败');location.href='"
                    +request.getContextPath()+"/index.jsp'</script>");
        }

dao层的sql语句

public int update(User user) {
        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            //1.获取连接
            conn = JdbcUtil.getConnection();
            //2.编写sql语句
            String sql = "UPDATE tb_emp SET name = ?,gender=?,age=?,address=?,email=?,qq=? where id = ?";
            //3.创建PreparedStatement
            pstm = conn.prepareStatement(sql);
            //4.给?赋值
            pstm.setString(1, user.getName());
            pstm.setString(2, user.getGender());
            pstm.setInt(3, user.getAge());
            pstm.setString(4, user.getAddress());
            pstm.setString(5, user.getEmail());
            pstm.setString(6, user.getQQ());
            pstm.setInt(7, user.getId());
            //5.执行之
            return pstm.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(null, pstm, conn);
        }
        return 0;
    }

至此修改功能完成

本文含有隐藏内容,请 开通VIP 后查看