Java多选进行批量删除功能

一、批量删除

通过一个循环来遍历要删除的用户信息的ID数组,然后依次调用单个删除信息的方法来删除每一个用户信息。

批量删除可以减少数据库的负担,因为在一次连接数据库的过程中,可以同时删除多条数据,而不需要多次连接数据库。

 二、代码实现

1.连接数据库,使用删除语句实现信息删除方法

/**
     * 通过id查教师信息
     */
    @Override
    public Teacher findTeacherById(int id) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        Teacher teacher = null;

        conn = DButils.getConnection();//连接数据库
        String sql = "SELECT id,name,password,gender,email,remark,activatecode,state FROM teacher WHERE  id=?";
        try {
            ps = conn.prepareStatement(sql);
            ps.setInt(1,id);
            rs = ps.executeQuery();
            
            while (rs.next()){
                teacher = new Teacher();
                teacher.setId(rs.getInt(1));
                teacher.setName(rs.getString(2));
                teacher.setPassword(rs.getString(3));
                teacher.setGender(rs.getString(4));
                teacher.setEmail(rs.getString(5));
                teacher.setRemark(rs.getString(6));
                teacher.setActivatecode(rs.getString(7));
                teacher.setState(rs.getString(8));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DButils.closeDB(conn,ps,rs);
        return teacher;
    }
/**
     * 删除教师数据
     */
    @Override
    public boolean deleteTeacherById(int id) {
        Connection conn = null;
        String sql = null;
        PreparedStatement ps =null;
        int i=0;
        boolean flag = false;
        try{
            conn = DButils.getConnection();
            sql="DELETE FROM teacher WHERE id=?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1,id);

            i=ps.executeUpdate();
            if (i>0){
                flag=true;
            }

        }catch (SQLException e){
            e.printStackTrace();
        }
        DButils.closeDB(conn,ps,null);
        return flag;
    }

2.对教师id和删除状态进行封装并对两个方法进行处理

public class StateInfor {
    private int stateId;
    private String teacherId;

    public int getStateId() {
        return stateId;
    }

    public void setStateId(int stateId) {
        this.stateId = stateId;
    }

    public String getTeacherId() {
        return teacherId;
    }

    public void setTeacherId(String teacherId) {
        this.teacherId = teacherId;
    }
}
/**
     * 批量删除
     */
    @Override
    public StateInfor batchesDelete(String[] ids) {
        TeacherDao teacherDao = new TeacherDaoImpl();
        StateInfor stateInfor = new StateInfor();
        for (String id : ids){
            Teacher teacher = teacherDao.findTeacherById(Integer.parseInt(id));
            if (teacher==null){
                stateInfor.setStateId(0);//为0时未选择数据
                stateInfor.setTeacherId(id);
                return stateInfor;
            }
        }
        for (String id : ids){
            boolean b = teacherDao.deleteTeacherById(Integer.parseInt(id));
            if (b==false){
                stateInfor.setStateId(1);//为1时删除失败
                stateInfor.setTeacherId(id);
                return stateInfor;
            }
        }
        stateInfor.setStateId(2);//为2时删除成功
        return stateInfor;
    }

3.对前台网页进行处理

<div class="pull-left">
                                <div class="form-group form-inline">
                                    <div class="btn-group">

                                        <button type="button" class="btn btn-default" title="批量删除" onclick="deleteTeachers()"><i class="fa fa-trash-o"></i> 批量删除</button>

                                    </div>
                                </div>
                            </div>
//使用form表单上传数据
<form action="${pageContext.request.contextPath}/TeacherController" id="formdelete">
                                <input type="hidden" name="action" value="deleteTeachers">
                                <input type="hidden" name="pageNum" value="${page.pageNum}">
                                <table id="dataList" class="table table-bordered table-striped table-hover dataTable">
                                    <thead>
                                    <tr>
                                        <th class="" style="padding-right:0px;">
                                            <input id="selall" type="checkbox" class="icheckbox_square-blue">
                                        </th>
                                        <th class="sorting_asc">ID</th>
                                        <th class="sorting_desc">姓名</th>
                                        <th class="sorting_asc sorting_asc_disabled">密码 </th>
                                        <th class="sorting_desc sorting_desc_disabled">性别</th>
                                        <th class="sorting">邮箱 </th>
                                        <th class="text-center sorting">备注</th>
                                        <th class="text-center">操作</th>
                                    </tr>
                                    </thead>
                                    <tbody>

                                    <c:forEach items="${page.list}" var="teacher">
                                    <tr>
                                        <td><input name="ids" type="checkbox" value="${teacher.id}"></td>
                                        <td>${teacher.id}</td>
                                        <td>${teacher.name}</td>
                                        <td>${teacher.password}</td>
                                        <td>${teacher.gender}</td>
                                        <td>${teacher.email}</td>
                                        <td class="text-center">${teacher.remark}</td>
                                        <td class="text-center">
                                            <a href="#"><button type="button" class="btn bg-olive btn-xs">编辑</button></a>
                                            <a href="${pageContext.request.contextPath}/TeacherController?action=delete&id=${teacher.id}"><button type="button" class="btn bg-olive btn-xs">删除</button></a>
                                            <input type="hidden" name="pageNum" value="${page.pageNum}">

                                        </td>
                                    </tr>
                                    </c:forEach>
                            </form>
//实现点击事件
<script>
function deleteTeachers() {
            var ids = document.getElementsByName("ids");
            var flag = false;
            for (var i=0;i<ids.length;i++){
                if (ids[i].checked){
                    flag = true;
                    break;
                }
            }
            if (flag){
                if (confirm("您确定要删除选中的吗?")){
                    document.getElementById("formdelete").submit();
                }
            }else {
                alert("没有选择删除的对象,请选择!")
            }
        }

    </script>

4.在Servlet中调用业务处理

@WebServlet("/TeacherController")
public class TeacherController extends HttpServlet{
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action = req.getParameter("action");

        /**
         * 删除用户信息
         */
        if ("deleteTeachers".equals(action)){
            String[] ids = req.getParameterValues("ids");
            TeacherService teacherService = new TeacherServiceImpl();
            StateInfor stateInfor = teacherService.batchesDelete(ids);
            if (0==stateInfor.getStateId()){
                resp.getWriter().print(stateInfor.getTeacherId()+"号用户不存在");
            }
            if (1==stateInfor.getStateId()){
                resp.getWriter().print(stateInfor.getTeacherId()+"号用户删除失败");
            }
            //删除成功后进行回显
            if (2==stateInfor.getStateId()){
                req.getRequestDispatcher("TeacherController?action=splitPage").forward(req,resp);
            }
        }

        }

    }

三、运行结果

 

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 JDBC API 来连接 MySQL 数据库,并使用批处理(Batch)技术来进行批量删除。以下是一个示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class BatchDeleteExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test"; String user = "username"; String password = "password"; String sql = "DELETE FROM mytable WHERE id = ?"; int[] idsToDelete = {1, 2, 3, 4, 5}; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement pstmt = conn.prepareStatement(sql)) { for (int id : idsToDelete) { pstmt.setInt(1, id); pstmt.addBatch(); } int[] results = pstmt.executeBatch(); System.out.println("Deleted " + results.length + " rows."); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们首先定义了要连接的 MySQL 数据库的 URL、用户名和密码。然后,我们定义了要执行的 SQL 语句,其中 `?` 表示要删除的记录的 ID。接下来,我们定义了要删除的记录的 ID 数组。在 `try` 块中,我们使用 `DriverManager.getConnection()` 方法来获取与数据库的连接。然后,我们使用 `conn.prepareStatement()` 方法来创建一个预编译的 `PreparedStatement` 对象。接着,我们使用 `pstmt.setInt()` 方法来设置 `?` 的值,并使用 `pstmt.addBatch()` 方法将该语句添加到批处理中。最后,我们使用 `pstmt.executeBatch()` 方法来执行批处理,并返回一个整数数组,表示每个语句的执行结果。我们可以通过检查该数组的长度来确定删除了多少行。在 `catch` 块中,我们简单地打印了异常堆栈跟踪。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值