那年没学懂的(java web)批量删除
下面进入正题,我们来以12306的这个管理员页面为例,
第一步:一般我们需要通过id来删除信息,所以就通过EL表达式取到数据的id,放到上面,并命名为ids,你也可以把它的id放到这个复选框的后面,方便查看。
第二步:写form表单,因为我们要通过表单提交来完成删除,注意form表单的范围及它要访问的路径。
第三步:在servlet中获取ids,调用底层service实现删除功能,这里你也可以加一下判断和处理。
第四步:关于写删除的几种方法,我们在这里使用的是deleteUserBatch,Batch是一个批量处理数据的方法。
第五步:dao层的实现,创建一个关于userdao的接口,通过接口来实现。下面的是核心代码。
@Override
public boolean deleteUsersBatch(int[] ids) {
try {
//1.获取数据库连接
//conn = DBUtil.getConnection();
//2.获取PreparedStatement对象
stat = conn.prepareStatement("delete from tab_user where id=?");
//3.绑定变量值----遍历绑定多个id
for (int id : ids) {
stat.setInt(1, id);
//-----------addBatch()--------------------1. 添加批处理语句
stat.addBatch();//delete from tab_user where id=1
//delete from tab_user where id=2
//delete from tab_user where id=3
}
//4.执行更新--------------executeBatch()-----------------2.执行批处理语句
int[] results = stat.executeBatch();
//5.处理结果 ① 执行成功 : a) 大于等于 0 的数 , b)返回SUCCESS_NO_INFO ② 执行失败:返回 EXECUTE_FAILED
for (int result : results) {
// ② 执行失败:返回 EXECUTE_FAILED
if(result == Statement.EXECUTE_FAILED)
{
return false;
}
}
return true;
} catch (SQLException e) {
e.printStackTrace();
} finally {
//6.关闭资源
DBUtil.close(stat, rs);
}
return false;
}
第六步:service层,创建一个关于userservice的接口,方便调用与后期处理,接口的好处我就不说了。这里用了事务管理。
@Override
public boolean deleteUsersBatch(int[] ids) {
Connection conn = null;
try{
conn = DBUtil.getConnection();
DBUtil.beginTransaction(conn); //1.关闭自动提交功能----------------------
//--------------------代码核心区域 ------ start----------------------------------
//① 删除用户信息
IUserDao userDao = new UserDaoImpl(conn);
boolean result = userDao.deleteUsersBatch(ids);
System.out.println("用户[" + Arrays.toString(ids) + "]删除结果:" + result);
if(result)
{
DBUtil.commitTransaction(conn); //2.如果操作成功,提交事务-------------------
System.out.println("操作成功,提交事务------------------------------");
return true;
}
else
{
DBUtil.rollbackTransaction(conn);//3.1 如果操作失败,回滚事务------------------
System.out.println("操作失败,提交事务------------------------------");
}
}
catch(Exception e)
{
DBUtil.rollbackTransaction(conn); //3.2 如果操作发生异常,回滚事务-----------------
System.out.println("操作发生异常,提交事务------------------------------");
} finally {
//4.关闭连接
DBUtil.close(conn);
}
return false;
}