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