前面两篇文章都是为了实现修改做的准备工作,此时可以在修改页面点击“保存”按钮进行修改。
需要使用两个隐藏域,一个保存操作的类型,即“update”,一个保存id的取值:
<form class="form-horizontal" action="stu">
<input type="hidden" name="type" value="update" />
<input
type="hidden" name="id" value="<%=stu.getId()%>" />
<!--其他代码略-->
</form>
后端StudentController类中,的doGet方法,再加入一个else if:
else if (type.equals("update")) {
update(request, response);
}
新增一个update方法:
public void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String gender = request.getParameter("gender");
int age = Integer.parseInt(request.getParameter("age"));
Student stu = new Student();
stu.setId(id);
stu.setName(name);
stu.setGender(gender);
stu.setAge(age);
StudentDao stuDao = new StudentDao();
boolean flag = stuDao.update(stu);
if (flag) {
response.sendRedirect("stu");
} else {
// 错误页面
}
}
在StudentDao中加入一个udpate方法:
public boolean update(Student stu) {
int rs = 0;// 表示执行sql语句的结果
// jdbc 七个步骤
// 1.将数据库jar包拷贝到lib文件夹下
try {
// 2.加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 3.建立连接
Connection conn = DriverManager
.getConnection("jdbc:mysql://localhost:3306/school_sk1?characterEncoding=utf-8", "root", "123456");
// 4.建立SQL执行器
Statement stat = conn.createStatement();
// 5.执行sql语句
String sql = "update student set name='" + stu.getName() + "',gender='" + stu.getGender() + "',age="
+ stu.getAge() + " where id=" + stu.getId();
rs = stat.executeUpdate(sql);
// 6. 处理结果
// 7.关闭连接
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs > 0;
}