什么是批量删除?
批量删除说简单一点就是在删除单个记录的基础上多写一个for循环语句。在for循环语句中依次执行单个删除的操作,最后达到批量删除的效果。那么怎么才能实现批量删除呢?
第一步 写一个checkbox,也就是复选框
选中复选框表示我想要删除这一行的内容,在数据库中,删除一条记录的话首先得传递一个参数,也就是它的主键,一般也就是id,no(number)之内的,然后在复选框后面的一条记录一般是以主键打头,例如:
我想进行批量删除操作就要用到复选框checkbox,然而我想取的主键值又在复选框后面,怎么将他们绑定在一起呢?
第二步 利用value将checkbox与id绑定在一起
<td><input type="checkbox" name="checkbox" value="${s.bno}"/></td>
利用value可以将复选框后面的主键的信息绑定到复选框中,这样选中复选框既可以表示我要删这条记录,同时我也获取了删除这条记录的主键信息。
第三步 利用js取出选中了的checkbox中的值
function deleteAllBook(){
// 获取input标签下type类型为checkbox的所有选中的checked框
var option = $("input:checkbox:checked");
//取出checked框中的值
var checkedId = "";
var boo=true;
for (var i = 0, len = option.length; i < len; i++) {
if (boo) {
boo=false;
checkedId += option[i].value;
}
else
checkedId += ","+option[i].value;
}
var flag = window.confirm("你确定要删除这条记录吗");
//alert(checkedId);
if(flag){
window.location.href = "deleteSomeBookServlet?bno="+checkedId;
}
}
checkedld中就存放这你选择的复选框中的id值,并以逗号分隔,例如:2,5,9
第四步 利用Servlet中获取传递过来的参数并进行分割
上一步中传递过来一个名为bno的参数,其值为checkedld,数据类型为String
首先,我们请求获取参数,来接收这个参数,并放到一个变量中存储。
String bno=request.getParameter("bno");
由于bno是String类型,并且含有逗号分隔符,我们自然而然想到了split()函数分割String为一个String[]数组。
String[] b=bno.split(",");
接上例:如果是2,5,9,分割后会变成{2,5,9}
第五步 利用for循环语句依次调用DAO层删除功能的函数
//首先new一个bookdao对象,然后写for循环,利用bookdao调用DAO层删除函数
BookDAO bookdao=new BookDAO();
boolean flag=false;
for(int c=0;c<b.length;c++) {
flag=bookdao.deleteSomeBook(b[c]);//删除成功则返回true
}
if(flag){//如果删除成功,利用Session向页面返回成功信息,并重定向至ShowBookServlet
request.getSession().setAttribute("err", "删除成功");
response.sendRedirect("ShowBookServlet");
}else{//如果删除失败,利用Session向页面返回错误信息,并请求转发至ShowBookServlet
request.getSession().setAttribute("err", "删除失败");
request.getRequestDispatcher("ShowBookServlet").forward(request, response);
}
第六步 DAO层删除函数的编写
首先你得明白上面传过来的参数bno是String类型的,其他的代码跟普通的删除一样;
public boolean deleteSomeBook(String array) {
conn=getConnectionn();
try {
pStat =conn.prepareStatement("delete from t_book where bno = ?");
pStat.setString(1, array);
int cnt=pStat.executeUpdate();
if( cnt>0 ) return true;
else return false;
}catch (Exception e) { return false; }
finally{ close(); }
}