修改用户数据的功能

1.首先在finduser.jsp中,加一个修改的链接

<td><a href="deleteUser?id=${u.id}">删除</a></td>

2.在修改之前,我们首要查一下我要修改的数是否还存在

3.在用户接口里面,定义一个查询某个用户的方法

    /**

     * 根据id查询某个用户

     * @param id 用户编号

     * @return

     */

    public UserInfo findUserById(int id);

4.然后去实现这个方法

@Override

    public UserInfo findUserById(int id) {

        // TODO Auto-generated method stub

        UserInfo userinfo=null;

        // 1.获得数据库连接对象

        Connection conn=DBHelper.getConn();

        // 2.书写sql语句

        String sql="select * from user_info where id=?";

        // 3.预编译sql语句,得到preparement的对象

       

        try {

           PreparedStatement ps=conn.prepareStatement(sql);

           // 4.给参数(占位符)赋值

           ps.setInt(1, id);

           // 5.执行查询命令,会得到结果集

           ResultSet rs=ps.executeQuery();

          

           // 6.循环从结果集中读取数据给实体类对象属性赋

           if(rs.next()){// 返回值为true,意味着找到数据了,返回值为false,意味着没有找到数据



               userinfo=new UserInfo(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4));

           }

        } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

        }

       

        return userinfo;

    }

5.创建后端接口 FindUserByIdServlet

映射地址一定要和页面保持一致!! finduserbyid

6.操作和删除一样,就是调用的方法不太一样

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

        // TODO Auto-generated method stub

        // response.getWriter().append("Served at: ").append(request.getContextPath());

        // 1.设置请求和响应的编码格式

        request.setCharacterEncoding("utf-8");

        response.setCharacterEncoding("utf-8");

        // 2.接收传递过来的id

        String id=request.getParameter("id");

        // 3.调用根据id查询某个用户的方法

        UserInfoDao uid=new UserInfoDaoImpl();

        // Integer.parseInt 字符串转换成整型

        UserInfo ui=uid.findUserById(Integer.parseInt(id));

        // 4.判断是否查找到

        if(ui!=null){// 找到了

           // request作用域的范围是同一个请求,超过同一个请求,存储的数据不存在

           // 把查询出来的用户存储在request中

           request.setAttribute("ui", ui);

           // 转发到这个注册页面

        request.getRequestDispatcher("register.jsp").forward(request, response);

           // 重新定向到页面,重新定向到新的资源

           // response.sendRedirect("finduser");

        }

    }

7.我们让修改和注册共页面(使用同一个页面)

难点是要判断我们当前的操作到底是修改还是注册

取决于我们的输入框有没有数据,有数据就是修改,没数据 就是注册

8.所以当我们查到到数据之后,我们要让数据回显到输入框中

我们使用request作用域,做数据回显就必须要保证他们是同一个请求

request作用域范围比session

9.去注册页面拿request里面存的数据,然后判断到底是注册还是修改

<form action="register" method="post">

        <!-- 查询之后做数据回显    value="${ui.??}"拿request里面存的数据 -->

        用户名<input type="text" name="userName" value="${ui.name}"/><br/>

        密码<input type="password" name="pwd" value="${ui.pwd}"/><br/>

        <!-- 在这个接口里面通过id值判断到底是注册还是修改,如果是注册就没有id值,修改有id值 -->

        <!-- 隐藏域 hidden -->

        <input type="hidden" name="id" value="${ui.id}"/>

        <input type="submit" value="注册/修改"/><br/>
</form>

10. 修改是转发过去的,虽然页面显示是注册页面,其实还是同一个请求,都在servlet里面,所以说数据可以取出来可以显示

11. 接下来还是在用户接口里面写个修改的方法

    /**

     * 修改用户信息

     * @param ui 用户对象

     * @return

     */

    public int update(UserInfo ui);

12. 然后去用户接口实现类里实现修改方法

@Override

    public int update(UserInfo ui) {

        // TODO Auto-generated method stub

        int result=0;

        // 1.获得数据库的连接

        Connection conn=DBHelper.getConn();

        // 2.书写sql语句  注册时间是改不了的

        String sql="update user_info set username=?,passwords=? where id=?";

        // 3.预编译sql语句

        try {

           PreparedStatement ps=conn.prepareStatement(sql);

           // 4.给参数(占位符)赋值

           ps.setString(1, ui.getName());

           ps.setString(2, ui.getPwd());

           ps.setInt(3, ui.getId());

           // 5.执行命令

           result=ps.executeUpdate();

        } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

        }

        return result;

    }

13.接下来我们去RegisterServlet里面做判断,判断id的值

   

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

        // TODO Auto-generated method stub

        // doGet(request, response);

        // 1.设置请求和响应的编码格式

        request.setCharacterEncoding("utf-8");

        response.setCharacterEncoding("utf-8");

        // 2.获取注册页面传递过来的数据

        String username=request.getParameter("userName");

        String pwd=request.getParameter("pwd");

        String id=request.getParameter("id");

//  System.out.println("***INNNNNNNNNNNNNNNNNNNNNNNNN***"+username+pwd);

        // 3.调用注册的方法

        UserInfoDao uid=new UserInfoDaoImpl();

        int result=0;

        if(id.equals("")||id.equals(null)){ // 为空就是注册

           // new UserInfo创建用户实体类的对象,通过无id的构造方法,创建一个新的用户的对象

           result=uid.register(new UserInfo(username, pwd, formate(new Date())));

        }else{ // 注册时间不改 调用修改方法,调用无时间的构造方法     然后把当前传递过来的字符串的id转换成整型

           result=uid.update(new UserInfo(Integer.parseInt(id), username, pwd));

        }

        // 判断注册成功还是失败

        if(result>0){// 注册或修改成功,跳转到登录页面

           response.sendRedirect("login.jsp");

        }else{

           response.sendRedirect("register.jsp");

        }

    }

14.写到判断id是否为空的else时,调用修改方法,注册时间不改,所以我们去实体类里面再创建一个没有注册时间的构造方法 alt+shift+s+o   

public UserInfo(int id, String name, String pwd) {

        super();

        this.id = id;

        this.name = name;

        this.pwd = pwd;

}

15.

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值