实习实训
项目empManeger_2021
删除功能
前台实现
在empList.jsp中加入删除按钮,通过删除按钮的点击是事件删除数据库中的员工信息。其中所有员工信息前面都有一个复选框,复选框功能已在第五天实现,复选框的name为chk,复选框的value为当前员工的编号。
<input type="button" class="btn btn-primary" value="删除" onclick="delEmp()"/>
其中delEmp函数如下:
//删除功能
function delEmp(){
//判断用户是否选择数据,如果没有选择,我们需要给出提示
//获取所有的复选框
var isChk = false;
var arrChk = document.getElementsByName("chk");
for(var i=0; i<arrChk.length; i++){
if(arrChk[i].checked){
isChk = true;
break;
}
}
if(!isChk){
alert("请选择要删除的员工信息");
//结束当前方法,结束删除的动作
return;
}
//如果用户选择了数据,那么要进行二次确认
if(confirm("确定要删除所选记录么?")){
//用户点击了确定按钮,执行接下来的操作
//获取选中员工的工号,并传递的后台进行删除
//只有工号才能唯一确定某个员工
//该变量用于存放所有被选中的员工工号
var empnos = "";
for(var i=0; i<arrChk.length; i++){
//判断:如果当前复选框被选中,那么就获取value值
//即可获得被选中的员工编号
if(arrChk[i].checked){
empnos = empnos + arrChk[i].value;
empnos += ",";
}
}
//empnos的值为: 1,2,3,
//字符串的截取,去掉最后一个,
empnos = empnos.substring(0,empnos.length-1);
//请求后台,将empnos传递到后台,进行删除操作
window.location.href = "DelEmpServlet?empnos=" + empnos;
}
}
后台实现
数据库接口方法 deleteByEmpno声明
/**
* 根据工号进行批量删除
* @param empnos 数组,存放了要删除的员工工号
* @return
*/
int deleteByEmpno(int[] empnos) ;
数据库接口方法deleteByEmpno实现
@Override
public int deleteByEmpno(int[] empnos) {
Connection conn = DBUtil.getConn();
int num = 0;
PreparedStatement pst = null;
String sql = "delete from employee where empno in (";
//根据数组的长度,决定在sql中拼接几个?
for(int i=0; i<empnos.length; i++){
sql += "?";
//除去最后一次,其他循环都需要加上,
if(i != empnos.length -1){
sql += ",";
}
}
sql += ")";
try {
pst = conn.prepareStatement(sql);
//设置占位符
for(int i=0; i<empnos.length; i++){
pst.setInt(i+1,empnos[i]);
}
num = pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.closeAll(conn,pst,null);
}
return num;
}
业务逻辑delByEmpno声明
int delByEmpno(String empnos);
业务逻辑delByEmpno实现
@Override
public int delByEmpno(String empnos) {
//dao层需要的参数是int数组
//我们需要将字符串empnos转换为int数组
//利用,将字符串隔开,转换为字符串数组
String[] strEmpno = empnos.split(",");
int[] intEmpnos = new int[strEmpno.length];
//将字符串转换为int
for(int i=0; i<strEmpno.length; i++){
intEmpnos[i] = Integer.parseInt(strEmpno[i]);
}
int num = empDao.deleteByEmpno(intEmpnos);
return num;
}
DelEmpServlet
package com.wangbiao.emp.servlet;
import com.wangbiao.emp.service.IEmpService;
import com.wangbiao.emp.service.impl.EmpServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/DelEmpServlet")
public class DelEmpServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取前台请求参数,并调用service层
String empnos = request.getParameter("empnos");//小括号中的值要和前台访问路径中?后的值完全相同
IEmpService empService = new EmpServiceImpl();
int num = empService.delByEmpno(empnos);
if(num > 0){
//删除成功
request.setAttribute("msg","成功删除了" + num + "条数据");
}else{
request.setAttribute("msg","服务器错误");
}
request.getRequestDispatcher("GetAllEmpServlet").forward(request,response);
}
}