对数据库进行更新记录和删除记录的操作
更新
步骤:
(1)首先在之前显示所有用户的jsp文件(uesrList.jsp)中添加代码,使得更新操作通过链接的方式跳转到相应的界面实现对某条记录的更新
添加一个表头单元格,设置为 “操作”
<tr>
...
<th>操作</th>
</tr>
在操作的下面给每条记录的后面,设置对应的操作链接(顺便把删除的也设好了)
<td>
<a href="/blog/deleteUser?id=${u.id}">删除用户</a>
<a href="/blog/showUpdateUser?id=${u.id}">更新用户</a>
</td>
显示效果:
(2)既然是更新记录,那么首先需要显示要更新记录的所有数据,然后再原有数据的基础之上进行修改,所以此处需我们需要创建一个servlet文件,使得用户在点击“更新用户”这个链接后,就直接跳转到该文件,执行里面的代码命令,查询此条记录的所有数据(注意命名要与链接中的命名保持一致)
(3)最后新建一个jsp文件,编辑代码使其类似于注册界面,将查询的数据显示出来
ShowUpdateUserServle.java :
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
long id = Long.valueOf(request.getParameter("id"));//接收参数(此处通过查询id来显示记录信息,也可使用其他参数,但其他参数可能存在不唯一性)
String sql = "select * from t_user where id = " + id;//准备sql语句
Connection connection = null;
Statement statement = null;
try {
connection = (Connection) DBUtil.getConnection();
statement = (Statement) connection.createStatement();
System.out.println(sql);
ResultSet resultSet = statement.executeQuery(sql);//执行sql语句
//遍历当前id对应记录的每条数据
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getLong("id"));
user.setEmail(resultSet.getString("email"));
user.setPhoneNumber(resultSet.getString("phone_number"));
user.setUsername(resultSet.getString("username"));
user.setNickname(resultSet.getString("nickname"));
user.setPassword(resultSet.getString("password"));
user.setCreateTime(resultSet.getTimestamp("create_time"));
user.setUpdateTime(resultSet.getTimestamp("update_time"));
request.setAttribute("user", user);
}
RequestDispatcher dispatcher = request.getRequestDispatcher("showUpdateUser.jsp");//查询完后,跳转到showUpdateUser.jsp页面
dispatcher.forward(request, response);
return;//结束操作
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
//关闭连接和接口
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//如果操作中出现异常则跳转到error.jsp,显示“系统异常”
request.setAttribute("errorMsg", "系统异常");
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
dispatcher.forward(request, response);
}
showUpdateUser.jsp:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="/blog/updateUser" method="post">
<table>
<tr>
<td>邮箱</td>
<td>
<input name="email" value="${user.email}" type="text"/>
<input name="id" value="${user.id}" type="hidden"/>
</td>
</tr>
<tr>
<td>电话号码</td>
<td><input name="phoneNumber" value="${user.phoneNumber}" type="text"/></td>
</tr>
<tr>
<td>用户名</td>
<td><input name="username" value="${user.username}" type="text"/></td>
</tr>
<tr>
<td>昵称</td>
<td><input name="nickname" value="${user.nickname}" type="text"/></td>
</tr>
<tr>
<td>密码</td>
<td><input name="password" value="${user.password}" type="password"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit"/>
</td>
</tr>
</table>
</form>
</body>
</html>
效果:
(4)显示数据之后,接下来就是更新了。新建一个servlet文件,命名同上面的showUpdateUser.jsp中action中设置的保持一致。使得用户将要修改的新数据输入后,点击提交,更新完成。
updateUser.java:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
long id = Long.valueOf(request.getParameter("id"));//括号里面的为String类型,使用Long.valueOf将其强转为long型
String email = request.getParameter("email");
String phoneNumber = request.getParameter("phoneNumber");
String username = request.getParameter("username");
String nickname = request.getParameter("nickname");
String password = request.getParameter("password");
// 准备sql语句
String sql = "update t_user set email = '" + email + "', phone_number = '" + phoneNumber + "', username = '"
+ username + "', nickname = '" + nickname + "'," + " password = '" + password
+ "', update_time = now() where id = " + id;
String errorMsg = "";//定义一个变量,接收异常
Connection connection = null;
Statement statement = null;
try {
connection = (Connection) DBUtil.getConnection();
statement = (Statement) connection.createStatement();
System.out.println(sql);//打印sql语句
boolean success = statement.execute(sql);
System.out.println("执行结果:" + success);
response.sendRedirect("/blog/showUsers");//重定向跳转到showUsers(对应ShowUsersServlet.java)页面
return;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
errorMsg = e.getMessage();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
request.setAttribute("errorMsg", errorMsg);
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
dispatcher.forward(request, response);
更新效果:
删除
步骤:
(1)新建一个servlet文件(此处命名为DeleteUserServlet.java 注释和上述链接保持一致)
(2)编辑源代码
DeleteUserServlet.java:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
long id = Long.valueOf(request.getParameter("id"));
String sql = "delete from t_user where id = " + id;
String errorMsg = "";
Connection connection = null;
Statement statement=null;
try {
connection = (Connection) DBUtil.getConnection();
statement = (Statement) connection.createStatement();
System.out.println(sql);
boolean success = statement.execute(sql);
System.out.println("执行结果:" + success);
response.sendRedirect("/blog/showUsers");//重定向,显示表里面的所有记录
return;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
errorMsg = e.getMessage();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
request.setAttribute("errorMsg", errorMsg);
RequestDispatcher dispatcher = request.getRequestDispatcher("error.jsp");
dispatcher.forward(request, response);
}
由于表里面只有一条记录,所以删除后,表里面是空的: