批量删除

来源:互联网 发布:浅野忠信知乎 编辑:程序博客网 时间:2024/04/30 13:41

批量删除是我们在实践项目中很常见的一个知识点,批量删除中都会和前台页面的循环选择相关联,如下面的图片显示:

页面selectFlags循环选择

这是前台页面中的javascript循环选择的代码:

function modifyUser() {//获得页面 name为selectFlag的复选框的IDvar selectFlags  = document.getElementsByName("selectFlag");var count = 0;var j = 0;for (var i=0; i<selectFlags.length; i++) {if (selectFlags[i].checked) {//将选中的selectFlags(用户)的ID值赋给变量jj = i;count++;}}if (count == 0) {alert("请选择需要修改的用户!");return;}if (count > 1) {alert("一次只能修改一个用户!");return;}//传递要修改的用户idwindow.self.location = "user_modify.jsp?userId=" + selectFlags[j].value;}

 

下面的代码是通过前台提交的selectflags到jsp中循环删除,这样的删除效率较低

<%    String command=request.getParameter("command");   if("del".equals(command)){        //循环删除       for(int i=0;i<userIds.length;i++){        UserManager.getInstance().delUser(userIds[i]);     }              }%> 

下面的代码是jsp中的批量删除

<%        String command=request.getParameter("command");   if("del".equals(command)){         String[] userIds=request.getParameterValues("selectFlag");       //批量删除    UserManager.getInstance().delUser(userIds);      }%>


 

下面的代码是D层sql语句的批量删除代码

/** * 批量删除用户 *  * 采用一条语句完成删除 * 只提交一次 *  * 采用PreparedStatement占位符方式 *  * delete from t_user where user_id in (?, ?, ?) * @param userIds */public void delUser(String[] userIds) {StringBuilder sbStr = new StringBuilder();//拼SQL语句中的占位符的‘,’和‘?’for (int i=0; i<userIds.length; i++) {sbStr.append("?");if (i < (userIds.length - 1)) {sbStr.append(",");}}//SQL语句连接String sql = "delete from t_user where user_id in (" + sbStr.toString()  +  ")";Connection conn = null;PreparedStatement pstmt = null;try {conn = DbUtil.getConnection();pstmt = conn.prepareStatement(sql);//为pstmt赋参for (int i=0; i<userIds.length; i++) {pstmt.setString(i + 1, userIds[i]);}pstmt.executeUpdate();}catch(SQLException e) {e.printStackTrace();}finally {DbUtil.close(pstmt);DbUtil.close(conn);}}

总结:关于批量删除是一个很常见的知识点,而批量删除的关键点就在于sql语句的拼接,上面的代码注释的很清楚,总结成博客积淀下来。

原创粉丝点击