JavaWed项目之修改操作
修改操作基本思想还是不变的,第一,就是回填数据。第二,将锁修改好的数据信息进行保存。
首先,完成第一步。
<tr>
<td>${user.id}</td> <%--属性名称必须跟User.java一样,还有小写 --%>
<td>${user.username}</td>
<td>${user.password}</td>
<td>${user.email}</td>
<td>${user.role}</td>
<td>${user.status}</td>
edit 通过表格中的a标签,进行查询。
private void getUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("id");
int id = 0;
UserDao ud = new UserDaoImpl();
User user = null;
if(name != null) {
id = Integer.parseInt(name);
user = ud.findOne(id);
request.setAttribute("user", user);
request.getRequestDispatcher("update.jsp").forward(request, response);
}
else {
response.getWriter().write("getUser err");
}
}
将所查询到的数据进行回填。回填到jsp页面后,又将已修改好的数据进行保存
<form action="UserListServlet?mthname=edit" method="POST">
id<input type = "text" name = "id" value="${user.id }" readonly = "readonly"><br>
username<input type="text" value="${user.username }" name="username"><br>
password<input type="text" value="${user.password }" name="password"><br>
email<input type ="text" value="${user.email }" name="email"><br>
role<input type="text" value="${user.role }" name="role"><br>
status<input type="text" value="${user.status }" name="status"><br>
<input type="submit" value="提交">
上面jsp页面的代码将修改的数据进行传递到Servlet层。
private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
String email =request.getParameter("email");
String role=request.getParameter("role");
String status=request.getParameter("status");
String strid=request.getParameter("id");
UserDao ud =new UserDaoImpl();
if(username != null && password != null) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
user.setRole(Integer.parseInt(role));
user.setStatus(Integer.parseInt(status));
user.setId(Integer.parseInt(strid));
ud.update(user);
request.getRequestDispatcher("UserListServlet?mthname=list").forward(request, response);
}
else {
response.getWriter().write("edit err");
}
}
上面代码主要是获取到所将要修改的数据与返回数据。而进行修改操作的代码主要是ud.update(user);
public void update(User user) {
Connection conn = DbUtils.getConnection();
String sql = "update users set username=?,password=?,email=?,role=?,status=? where id=?;";
PreparedStatement st = null;
try {
st = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
st.setString(1, user.getUsername());
st.setString(2, user.getPassword());
st.setString(3, user.getEmail());
st.setInt(4, user.getRole());
st.setInt(5, user.getStatus());
st.setInt(6, user.getId());
int num = st.executeUpdate();
if (num > 0 ) {
System.out.println("更新成功 id是:" + user.getId());
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DbUtils.close(conn, st, null);
}
}
其实整个修改的核心就是上面的方法,
Connection conn = DbUtils.getConnection();
这行代码主要是连接数据库的操作。
String sql = “update users set username=?,password=?,email=?,role=?,status=? where id=?;”;
//执行语句
这里的参数后面的问号对应的是:
st.setString(1, user.getUsername());
st.setString(2, user.getPassword());
st.setString(3, user.getEmail());
st.setInt(4, user.getRole());
st.setInt(5, user.getStatus());
st.setInt(6, user.getId());
1、2、3表示对应参数后面的问号
PreparedStatement st = null;
这里使用的是 PreparedStatement 接口,PreparedStatement也是用来执行sql语句的与创建Statement不同的是,需要根据sql语句 创建PreparedStatement。除此之外,还能够通过设置参数,指定相应的值,而不是 Statement那样使用字符串拼接。
executeUpdate();
executeUpdate不能执行查询语,executeUpdate的返回值是int,表示有多少条数据 受到了影响。
然后返回结果,关闭连接。